Главная страница
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.034 c
4-1165324335
Viper_Omsk
2006-12-05 16:12
2007.05.13
Перехват запроса отправки на печать


15-1176697979
pavel_guzhanov
2007-04-16 08:32
2007.05.13
Непонятный глюк с DVD-RW


2-1176977907
frameZ
2007-04-19 14:18
2007.05.13
копирование с помощью потоков


2-1177006647
Sapan
2007-04-19 22:17
2007.05.13
Удалить символ из поля


2-1177391484
allucard
2007-04-24 09:11
2007.05.13
Указатели