case WM_DESTROY:
PostQuitMessage (0); // Завершаем цикл обработки оконных сообщений
break;
Окно в Dll
Народ у меня такая проблема.
Есть код Dll'ки:
#include <windows.h>
HINSTANCE hInstance;
HWND hwnd;
LRESULT CALLBACK DllWndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);
BOOL APIENTRY DllMain(HINSTANCE hModule,DWORD dwReason,LPVOID)
{
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
WNDCLASS wnd;
memset(&wnd,0,sizeof(WNDCLASS));
wnd.style = CS_OWNDC|CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_GLOBALCLASS;
wnd.lpfnWndProc = (WNDPROC)DllWndProc;
wnd.hInstance = hModule;
wnd.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1);
wnd.lpszClassName = "DllWndClass";
wnd.lpszMenuName = NULL;
wnd.hCursor = LoadCursor(NULL,IDC_ARROW);
wnd.hIcon = NULL;
BOOL res = RegisterClass(&wnd);
hInstance = hModule;
break;
}
return 1;
}
LRESULT CALLBACK DllWndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch (msg)
{
default:
return DefWindowProc(hwnd,msg,wParam,lParam);
}
return 0;
}
extern "C" __declspec(dllexport) BOOL ShowWnd()
{
hwnd = CreateWindowEx(WS_EX_TOPMOST,"DllWndClass","Dll Window",
WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_CAPTION|WS_SYSMENU,
225,175,350,250,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hwnd,SW_SHOW);
MSG msg;
while (GetMessage(&msg,hwnd,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 1;
}
Загружаю библиотеку в run-time из exe-шника со следующим кодом:
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR cmdline,int ShowCmd)
{
HMODULE dll = LoadLibrary("dll.dll");
typedef BOOL(__cdecl * _ShowWnd)();
_ShowWnd ShowWnd = (_ShowWnd)GetProcAddress(dll,"ShowWnd");
ShowWnd();
FreeLibrary(dll);
return 0;
}
В принципе ПОЧТИ все работает. Только при закрытии окна процесс не завершается, т.е. ф-я ShowWnd не завершается. Подскажите, плз, в чем проблема.
:???:
Цитата:
Originally posted by [.MiR@Ge]
Всем привет!
Народ у меня такая проблема.
...
В принципе ПОЧТИ все работает. Только при закрытии окна процесс не завершается, т.е. ф-я ShowWnd не завершается. Подскажите, плз, в чем проблема.
:???:
Всем привет!
Народ у меня такая проблема.
...
В принципе ПОЧТИ все работает. Только при закрытии окна процесс не завершается, т.е. ф-я ShowWnd не завершается. Подскажите, плз, в чем проблема.
:???:
Попробуй обработать WM_DESTROY:
Код:
Цитата:
Originally posted by Владислав
Попробуй обработать WM_DESTROY:
Попробуй обработать WM_DESTROY:
Код:
case WM_DESTROY:
PostQuitMessage (0); // Завершаем цикл обработки оконных сообщений
break;
PostQuitMessage (0); // Завершаем цикл обработки оконных сообщений
break;
Большое спасибо, все заработало.
Только вместо WM_DESTOY сделал обработку WM_CLOSE.