一个窗口类,以下是两个关键函数。
这个窗口在一般的基于对话框的应用程序中能收到外部发到m_hWnd上的自定义消息,以及OnTimer事件。
但是在控制台程序或者服务程序下,就无法收到自定义消息了。
请问还需要做些什么?重分相谢谢,分不够再加。另注:这个窗口类是在一个COM组件中使用,但调用COM组件的有可能是控制台、服务程序,也有可能是一个窗口应用程序。但是目前在控制台和服务程序下使用COM时,COM中的窗口类无法处理到自定义消息。//构造函数
CHelperWindow()
{
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof wndclass;
wndclass.style = 0;
wndclass.lpfnWndProc = WindowProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = GetModuleHandle(0);
wndclass.hIcon = 0;
wndclass.hCursor = 0;
wndclass.hbrBackground = 0;
wndclass.lpszMenuName = 0;
wndclass.lpszClassName = _T("Helper Window");
wndclass.hIconSm = 0;
RegisterClassEx(&wndclass);
m_hWnd=CreateWindow(_T("Helper Window"), _T("Helper Window"), 0, 0, 0, 0, 0, 0, 0, 0, GetModuleHandle(0));
ASSERT(m_hWnd);
SetWindowLong(m_hWnd, GWL_USERDATA, (LONG)this);
}static LRESULT CALLBACK WindowProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
if (message == WM_USER + 100)
{
//消息处理......略......
//控制台下为何收不到消息?
}
return 0;
}
这个窗口在一般的基于对话框的应用程序中能收到外部发到m_hWnd上的自定义消息,以及OnTimer事件。
但是在控制台程序或者服务程序下,就无法收到自定义消息了。
请问还需要做些什么?重分相谢谢,分不够再加。另注:这个窗口类是在一个COM组件中使用,但调用COM组件的有可能是控制台、服务程序,也有可能是一个窗口应用程序。但是目前在控制台和服务程序下使用COM时,COM中的窗口类无法处理到自定义消息。//构造函数
CHelperWindow()
{
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof wndclass;
wndclass.style = 0;
wndclass.lpfnWndProc = WindowProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = GetModuleHandle(0);
wndclass.hIcon = 0;
wndclass.hCursor = 0;
wndclass.hbrBackground = 0;
wndclass.lpszMenuName = 0;
wndclass.lpszClassName = _T("Helper Window");
wndclass.hIconSm = 0;
RegisterClassEx(&wndclass);
m_hWnd=CreateWindow(_T("Helper Window"), _T("Helper Window"), 0, 0, 0, 0, 0, 0, 0, 0, GetModuleHandle(0));
ASSERT(m_hWnd);
SetWindowLong(m_hWnd, GWL_USERDATA, (LONG)this);
}static LRESULT CALLBACK WindowProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
if (message == WM_USER + 100)
{
//消息处理......略......
//控制台下为何收不到消息?
}
return 0;
}
//下面是WinMain()函数的第二项工作:建立主消息循环。
//下面这个循环就是Windows程序的心脏:主消息循环。一旦退出主消息循环,程序就结束了。
// 主消息循环:
while (GetMessage(&msg, NULL, 0, 0)) //使用GetMessage函数从消息队列中获取消息;
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) //解释加速键
{
TranslateMessage(&msg); //使用TranslateMessage函数解释消息;
DispatchMessage(&msg); //发送消息到主窗口函数中去。
}
}
//退出消息循环,WinMain函数才返回,程序才结束。
return (int) msg.wParam;
}
#include <iostream>
using namespace std;int main()
{
DWORD dwThread;
MSG msg;
DWORD dwMyMsg = WM_USER + 128; dwThread = GetCurrentThreadId();
PostThreadMessage(dwThread, dwMyMsg, (WPARAM)0, (LPARAM)0); while (GetMessage(&msg, NULL, 0, WM_USER+129))
{
if (msg.message == dwMyMsg)
cout << "has receive dwMyMsg\n";
else
cout << "Message: " << msg.message << endl;
} return 0;
}这段程序输出has receive dwMyMsg