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

Вниз

Создание окна в потоке с помощью ф-й WINAPI (в dll)   Найти похожие ветки 

 
niko ©   (2006-12-14 14:08) [0]

Помогите разобраться с проблемой:
 в VC++ работаю с dll. При её присоединении к процесу создаю отдельный поток и с помощью функций WINAPI в нём создаю окно, после чего обрабатываю GetMessage (код приведён ниже). Так вот на первом же вызове GetMessage поток стопорится и самое интересное что форма так и не появляется, хотя ShowWindow(MyWnd, SW_SHOW) сработало нормально.
 Точно такойже код, но в Delphi работает,как не странно, нормально.Правдо сам поток создаю не средствами WINAPI, а с помощью класса TThread и создание формы происходит в ф-и TMyThread.Execute

Ниже приведён код на Delphi:

   window.cbSize        := SizeOf (window);
   window.style         := CS_HREDRAW or CS_VREDRAW;
   window.lpfnWndProc   := @WindowProc;
   window.cbClsExtra    := 0;
   window.cbWndExtra    := 0;
   window.hInstance     := HInstance;
   window.hIcon         := LoadIcon (0,IDI_APPLICATION);
   window.hCursor       := LoadCursor (0,IDC_ARROW);
   window.hbrBackground := CreateSolidBrush(RGB(182, 219, 255));
   window.lpszMenuName  := nil;
   window.lpszClassName := "NameClass";
   RegisterClassEx (window);
   Mwindow:=CreateWindowEx(WS_EX_TOPMOST,"NameClass","NameWindows",WS_POPUP or WS_VISIBLE, 0 , 0, 300, 100, 0 , 0, HInstance, nil);
   ShowWindow(Mwindow,SW_SHOW);
   while GetMessage(Mmsg,0,0,0) do
   begin
     TranslateMessage(Mmsg);
     DispatchMessage(Mmsg);
   end;


Ниже приведён код на C:

   window.cbSize        = sizeof (window);
   window.style         = CS_HREDRAW | CS_VREDRAW;
   window.lpfnWndProc   = WindowProc;
   window.cbClsExtra    = 0;
   window.cbWndExtra    = 0;
   window.hInstance     = GetMyDllInstance();
   window.hIcon         = LoadIcon (0,IDI_APPLICATION);
   window.hCursor       = LoadCursor (0,IDC_ARROW);
   window.hbrBackground = CreateSolidBrush(RGB(182, 219, 255));
   window.lpszMenuName  = NULL;
   window.lpszClassName = "NameClass";
   RegisterClassEx(&window);
   MyWnd = CreateWindowEx(WS_EX_TOPMOST,"NameClass","NameClass",WS_POPUP | WS_VISIBLE, 0 , 0, 300, 100, 0 , 0, GetMyDllInstance(), NULL);
   ShowWindow(MyWnd, SW_SHOW);
//
//    До тела цикла не доходит и из цикла не выходит
//
   while (GetMessage(&Mmsg, NULL, NULL, NULL))
   {
       TranslateMessage(&Mmsg);
       DispatchMessage(&Mmsg);
   }


 
BiN ©   (2006-12-14 14:17) [1]


>  GetMyDllInstance()

?


 
Игорь Шевченко ©   (2006-12-14 14:21) [2]

Про GetLastError забыли ?


 
niko ©   (2006-12-14 14:42) [3]

GetMyDllInstance() - определяет хендл этой dll в формате HINSTANCE


 
niko ©   (2006-12-14 14:46) [4]

Программа зависает при вызове GetMessage - она не возвращает управление, соответственно GetLastError не вызвать.


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

PeekMessage(&Mmsg, NULL, WM_USER, WM_USER, PM_NOREMOVE);

ShowWindow(MyWnd, SW_SHOW);
UpdateWindow(MyWnd);

while (GetMessage(&Mmsg, NULL, NULL, NULL))
{


 
niko ©   (2006-12-14 15:26) [6]

clickmaker: попробовал, та же история что и раньше. Вызывается GetMessage, и она не возвращает управление


 
Игорь Шевченко ©   (2006-12-14 15:32) [7]

Ну так нету сообщений...Может, у тебя в оконной процедуре ошибка



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

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

Наверх




Память: 0.48 MB
Время: 0.042 c
2-1177488098
Riply
2007-04-25 12:01
2007.05.13
ReadFileEx - место "повторного вызова".


2-1176994250
Ксандр
2007-04-19 18:50
2007.05.13
Методы современной криптографии


15-1176457337
minaku
2007-04-13 13:42
2007.05.13
проблемы с LINUX


1-1173953857
__DATA__
2007-03-15 13:17
2007.05.13
Работа с компонентами в многопоточном приложении


2-1177005194
Quattro
2007-04-19 21:53
2007.05.13
почтовый клиент