I created a message loop function but for some reason GetMessage() function is receiving all WM_ messages except WM_COMMAND. But WndProc -is- receiving the WM_COMMAND. Please advice. Thereis the code of the dll:
#include "stdafx.h"
#include "globstruct.h"
GlobStruct* g_pGlob = NULL;
HWND hwndMain;
MSG DBP_msg;
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );
#define MYCOMMAND extern "C" __declspec ( dllexport )
#define MYCOMMAND2 __declspec ( dllexport )
MYCOMMAND2 void Constructor ( void )
{
}
MYCOMMAND2 void Destructor ( void )
{
}
MYCOMMAND2 void ReceiveCoreDataPtr ( LPVOID pCore )
{
g_pGlob = (GlobStruct*)pCore;
}
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
MYCOMMAND DWORD CreateButton(DWORD p_handle)
{
HWND button=CreateWindow(TEXT("button"), TEXT("Beep"),
WS_VISIBLE | WS_CHILD ,
20, 50, 80, 25,
(HWND)p_handle, (HMENU) 1, GetModuleHandle("my_window2.dll"), NULL);
if(!button)
return 0;
else
return (DWORD)button;
}
MYCOMMAND DWORD CreateMainWindow()
{
HWND hwndMain;
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.lpszClassName = TEXT( "Window" );
wc.hInstance = GetModuleHandle("my_window2.dll");
wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
wc.lpszMenuName = NULL;
wc.lpfnWndProc = WndProc;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
RegisterClass(&wc);
hwndMain = CreateWindow(wc.lpszClassName,
(LPCTSTR) NULL,
WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN|WS_CLIPSIBLINGS ,
0,0,300,300,
NULL,
(HMENU) NULL,
NULL,
NULL);
if (!hwndMain)
return 0;
else
ShowWindow(hwndMain, SW_SHOW);
UpdateWindow(hwndMain);
HWND DBP_winhandle = g_pGlob->hWnd;
SetParent(DBP_winhandle,hwndMain);
SetWindowLong(DBP_winhandle,GWL_STYLE,WS_THICKFRAME|WS_VISIBLE);
return (DWORD)hwndMain;
}
MYCOMMAND int Get_Message(DWORD w_handle)
{
GetMessage(&DBP_msg, NULL,0,0);
TranslateMessage(&DBP_msg);
DispatchMessage(&DBP_msg);
return (int)DBP_msg.message;
}
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
//mg=msg;
switch(msg)
{
case WM_COMMAND:
{
if(MessageBox(NULL, "WM_COMMAND received in wndproc", "", MB_OK)==1)
break;
}
case WM_CLOSE:
{
if(MessageBox(NULL, "quit really?", "", MB_OK)==1)
PostQuitMessage(0);
}
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
and i use it in the DBPRO as follows:
set window on
a as dword
b as dword
a=Create Main Window()
b=Create Button(a)
do
c=get message(a)
print str$(c)
loop
Sky