Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Окно в Dll

5.6K
13 января 2004 года
[.MiR@Ge]
6 / / 13.01.2004
Всем привет!
Народ у меня такая проблема.
Есть код 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 не завершается. Подскажите, плз, в чем проблема.

:???:
4.8K
13 января 2004 года
Владислав
19 / / 28.09.2003
Цитата:
Originally posted by [.MiR@Ge]
Всем привет!
Народ у меня такая проблема.
...
В принципе ПОЧТИ все работает. Только при закрытии окна процесс не завершается, т.е. ф-я ShowWnd не завершается. Подскажите, плз, в чем проблема.
:???:



Попробуй обработать WM_DESTROY:

 
Код:
case WM_DESTROY:
PostQuitMessage (0); // Завершаем цикл обработки оконных сообщений
break;
5.6K
13 января 2004 года
[.MiR@Ge]
6 / / 13.01.2004
Цитата:
Originally posted by Владислав


Попробуй обработать WM_DESTROY:
 
Код:
case WM_DESTROY:
PostQuitMessage (0); // Завершаем цикл обработки оконных сообщений
break;



Большое спасибо, все заработало.
Только вместо WM_DESTOY сделал обработку WM_CLOSE.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог