我的项目是一个返回DLL的控制台应用程序。我还在另一个项目中使用它。
此项目正在使用WFS方法。在其中一个方法中,我需要将HWND作为参数传递。原因是,每当一个方法想要发送一条消息(在我的例子中是事件)时,它将使用这个HWND。
首先,我尝试了一下:
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WFS_EXECUTE_EVENT:
case WFS_SERVICE_EVENT:
case WFS_USER_EVENT:
case WFS_SYSTEM_EVENT:
return S_OK;
}
return DefWindowProc(hWnd, msg, wParam, lParam );
}
HWND create(HWND parent)
{
HINSTANCE inst = GetModuleHandle (0);
WNDCLASSEX wincl;
wincl.hInstance = inst;
wincl.lpszClassName = TEXT("ConsoleClass");
wincl.lpfnWndProc = WndProc;
HWND mainWindow = CreateWindow(
TEXT("DM_Class_Name"),
TEXT("DM_Title"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
(HWND) NULL,
(HMENU) NULL,
inst,
(LPVOID) NULL);
ShowWindow(mainWindow,1);
return mainWindow;
}由于某种原因,它不能工作。窗口未显示,且HWND始终为NULL。
为什么它不起作用?
在搜索了几个小时后,我尝试了QDialog
QDialog dialog;
dialog.setObjectName("Device_Manager_Dialog");
dialog.setWindowTitle("Device Manager");
dialog.setFixedWidth(10);
dialog.setFixedHeight(10);
dialog.show();
dialog.setVisible(false);
QWidget * widget = dialog.window();
HWND windows_handle = widget->effectiveWinId();它是这样工作的。我创建了一个窗口和硬件,在类中我需要使用这个HWND。
我调用下面的代码行来获取它:
windows_handle = FindWindow(0, TEXT("Device Manager"));如果我想使用qdialog,我如何将WndProc赋值给qdialog或widget,这样我才能获得WFS方法将发送的消息?
发布于 2013-09-25 14:41:56
我发现了一个问题:
当我想要创建窗口时,类名必须是相同的。
WNDCLASS Wclass;
...
Wclass.lpszClassName = TEXT("Device_Manager_Class_Name");
...
HWND gHwnd = NULL;
gHwnd = CreateWindow(TEXT("Device_Manager_Class_Name")
...特别感谢乔纳森·波特,是他指引我来到这里。
https://stackoverflow.com/questions/18983464
复制相似问题