gpt4 book ai didi

c - 将窗口句柄传递给 C 中的线程。 (WIN32 API)

转载 作者:太空宇宙 更新时间:2023-11-04 05:28:18 25 4
gpt4 key购买 nike

我在我的应用程序中创建了一个窗口和一个线程。现在我希望线程处理一些数据并将其显示在主窗口上。为此,我在线程中使用了 PostMessage() 函数。即创建一个窗口,然后创建一个线程。该线程对数据进行一些处理,并向主窗口发送一条消息,告知现在应该显示数据。但问题是,为了这个目的,我必须传递窗口句柄,而对于这个线程,主窗口句柄是一个未声明的标识符。有什么可能的方法可以将主窗口的句柄传递给我的线程,以便使用这个句柄,线程能够发布消息。以下是任何帮助的代码片段:

///Thread Function////
DWORD WINAPI threadFunction(LPVOID param)
{
//do something
PostMessage(hMainWin, WM_thread,0, 0);
return true;
}

////Main Function///
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{
const char AH_Glb_ClassName[] = "myWindClass";
WNDCLASSEX wc;
MSG Msg;
//Registering the Window Class
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = NULL;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = AH_Glb_ClassName;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
HWND hMainWin; //Handle to Main WIndow
///Creating Main Window///
hMainWin = CreateWindowEx( WS_EX_CLIENTEDGE,
AH_Glb_ClassName,
"I am SERVER Window",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
440,
120,
NULL, NULL, NULL, NULL);
if(hMainWin == NULL)
{
MessageBox(NULL,
"Window Creation Failed!",
"Error!",
MB_ICONEXCLAMATION |
MB_OK);
return 0;
}
ShowWindow(hMainWin,SW_MAXIMIZE);
UpdateWindow(hMainWin);
/////////////////THREAD////////////////
DWORD threadID = 0;
///Creating Thread///
HANDLE threadHandle = CreateThread(NULL,
0,
threadFunction,
0,
0,
&threadID);

return 0;
}

最佳答案

DWORD WINAPI threadFunction(LPVOID param)
{
HANDLE hwnd = (HANDLE)param;
}

...

HANDLE threadHandle = CreateThread(NULL,
0,
threadFunction,
(LPVOID)hMainWin,
0,
&threadID);

线程函数有LPVOID类型,它匹配HANDLE类型,在Win32和x64中都是。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682453%28v=vs.85%29.aspx

顺便说一句,您需要向 WinMain 添加消息循环。

关于c - 将窗口句柄传递给 C 中的线程。 (WIN32 API),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15517869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com