Главная страница
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.044 c
2-1176976563
npu3pak
2007-04-19 13:56
2007.05.13
Запись в лог-файл из TMemo


2-1177323297
Stronger
2007-04-23 14:14
2007.05.13
Помогите решить эту задачу


15-1176397529
DillerXX
2007-04-12 21:05
2007.05.13
Что делать в Киеве?


2-1177411845
zet
2007-04-24 14:50
2007.05.13
Создание процедур


15-1175593101
=Guest=
2007-04-03 13:38
2007.05.13
Литература по delphi