Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.13;
Скачать: CL | DM;

Вниз

Создание окна с помощью CreateWindowEx в Си   Найти похожие ветки 

 
niko ©   (2006-12-15 13:20) [0]

В чём дело? Пишу код в dll. При её загрузки генерирую поток и в нём создаю окно, предварительно зарегесрировав класс данного окна. Почему то окно не создаётся, CreateWindowEx возвращает NULL (код ошибки = 6).


   MyWnd = CreateWindowEx(WS_EX_TOPMOST,"ClassName","WindowName",WS_POPUP | WS_VISIBLE,
                           0 , 0, 300, 100,
                           0 , 0, hModule, NULL);


 
Сергей М. ©   (2006-12-15 13:29) [1]

Похоже на то, что параметр hModule содержит некорректное значение, а именно не явзяется действительным хэндлом модуля, действительно существующего в АП тек.процесса.


 
niko ©   (2006-12-15 13:37) [2]

Проверял имя файла на который указывает hModule - всё правельно!


 
clickmaker ©   (2006-12-15 13:42) [3]

MSDN, CreateWindowEx

hInstance
[in] Windows 95/98/Me: Handle to the instance of the module to be associated with the window.
Windows NT/2000/XP: This value is ignored


 
Сергей М. ©   (2006-12-15 13:51) [4]


> clickmaker ©   (15.12.06 13:42) [3]


А мож у него для тек.приложения выставлен режим совместимости с Маздаем ?

Просто иных предположений в этих условиях пока нет. Род.окно, согласно справке, можно не указывать (оно опционально), если в стиле указан WS_POPUP.


 
BiN ©   (2006-12-15 13:58) [5]

Попробуй типа
  MyWnd = CreateWindowEx(WS_EX_TOPMOST,"ClassName","WindowName",WS_POPUP | WS_VISIBLE,
                          0 , 0, 300, 100,
                          GetForegroundWindow , 0, hModule, NULL);


 
BiN ©   (2006-12-15 14:03) [6]

Пардон, не учел замечание Сергея М про popup-окна. Но все равно попробуй -)


 
niko ©   (2006-12-15 14:10) [7]

Всем спасибо!

Я вроде как класс не правельно создал (прописал стандартный - заработало). Хотя в Delphi мой класс работает нормально.


 
clickmaker ©   (2006-12-15 14:18) [8]


> [7] niko ©   (15.12.06 14:10)

а что за класс и как создал? И что за стандартный?


 
niko ©   (2006-12-15 14:32) [9]

Класс создавал так:


WNDCLASSEX window;
. . . . . .

window.cbSize   = sizeof (window);
window.style         = CS_HREDRAW | CS_VREDRAW;
window.lpfnWndProc   = WindowProc;
window.cbClsExtra    = 0;
window.cbWndExtra    = 0;
window.hInstance     = hModule; // теперь согласен и на NULL
window.hIcon         = LoadIcon (0,IDI_APPLICATION);
window.hCursor       = LoadCursor (0,IDC_ARROW);
window.hbrBackground = CreateSolidBrush(RGB(182, 219, 255));
window.lpszMenuName  = NULL;
window.lpszClassName = "ClassName";
RegisterClassEx(&window);


Заработало когда при создании формы указал название класса не "ClassName", а "ComboBox".


 
clickmaker ©   (2006-12-15 15:07) [10]


> [9] niko ©   (15.12.06 14:32)

если уж RegisterClassEx, тогда надо и hIconSm указывать. Иначе можно и без Ex обойтись


 
niko ©   (2006-12-15 15:29) [11]


> [10] clickmaker ©   (15.12.06 15:07)


А можно по подробней как правельно создовать свой класс и регестировать его? (на примере)
Может я где какую мелочь упустил.

Мой класс не регестрируется. GetLastError = "The system cannot find the file specified."


 
clickmaker ©   (2006-12-15 15:46) [12]


> GetLastError = "The system cannot find the file specified."

а это тут причем? где у тебя обращение к файлам?


 
niko ©   (2006-12-15 16:05) [13]


> [12] clickmaker ©   (15.12.06 15:46)

Вот весь код функции:


void CreateMyForm()
{
window.cbSize   = sizeof (window);
window.style         = CS_HREDRAW | CS_VREDRAW;
window.lpfnWndProc   = WindowProc;
window.cbClsExtra    = 0;
window.cbWndExtra    = 0;
window.hInstance     = (HINSTANCE)Dll_hModule;
window.hIcon         = LoadIcon (0,IDI_APPLICATION);
window.hIconSm   = NULL;
window.hCursor       = LoadCursor (0,IDC_ARROW);
window.hbrBackground = CreateSolidBrush(RGB(182, 219, 255));
window.lpszMenuName  = NULL;
window.lpszClassName = "ClassName";
RegisterClassEx(&window);

_err= GetLastError(); FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_ARGUMENT_ARRAY, NULL, _err, 0, Buffer_err,sizeof(Buffer_err), NULL);
OutInfo(Buffer_err, _err);

   MyWnd = CreateWindowEx(WS_EX_TOPMOST,"ClassName","WindowName",WS_POPUP | WS_VISIBLE,
                           0 , 0, 300, 100,
                           NULL , NULL, (HINSTANCE)Dll_hModule, NULL);
ShowWindow(MyWnd, SW_SHOW);
   while (GetMessage(&Mmsg, NULL, NULL, NULL))
   {
 TranslateMessage(&Mmsg);
 DispatchMessage(&Mmsg);
   }
}


GetLastError = 2 ("The system cannot find the file specified.")


 
clickmaker ©   (2006-12-15 16:16) [14]


> [13] niko ©   (15.12.06 16:05)

если RegisterClassEx сработала успешно, то в GetLastError может быть значение, оставшееся там от какой-то предыдущей ошибки
if ( RegisterClassEx() == 0 )
{
 _err =
..
}

WindowProc как объявлена?


 
niko ©   (2006-12-15 16:22) [15]


LRESULT
WINAPI WindowProc  (HWND   wnd,
    unsigned int msg,
    WPARAM   wparam,
    LPARAM   lparam)
{
return 0;
}



 
clickmaker ©   (2006-12-15 16:30) [16]


> [15] niko ©   (15.12.06 16:22)

LRESULT
WINAPI WindowProc  (HWND   wnd,
   unsigned int msg,
   WPARAM   wparam,
   LPARAM   lparam)
{
switch (msg)
{
 case WM_CREATE:
   return 0;
}
return DefWindowProc(wnd, msg, wparam, lparam);
}


 
niko ©   (2006-12-15 16:35) [17]


> [16] clickmaker ©   (15.12.06 16:30) 

Чувак, ты крут!!!

Спасибо - наконец то заработало.



Страницы: 1 вся ветка

Текущий архив: 2007.05.13;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.03 c
15-1176447880
Александра
2007-04-13 11:04
2007.05.13
Помогите разобраться с Ораклом


10-1123757517
kblc
2005-08-11 14:51
2007.05.13
Связь с сервером


3-1171890225
Itonix
2007-02-19 16:03
2007.05.13
Дерево БД


2-1176971469
pasha_golub
2007-04-19 12:31
2007.05.13
Не могу закрыть MDIChild окно


3-1172214216
emfw
2007-02-23 10:03
2007.05.13
База данных