Я создал окно и поток в моем приложении. Теперь я хочу, чтобы поток обрабатывал некоторые данные и отображал их в главном окне. Для этой цели я использовал функцию PostMessage() в моей теме. Т.е. создается окно, затем создается поток. Поток применяет некоторую обработку данных и отправляет сообщение в главное окно, что данные должны отображаться сейчас. Но проблема в том, что для этой цели мне придется пройти ручку Window, хотя для этого потока Main Window Handle является незанятым IDENTIFIER. Есть ли какой-либо возможный способ, с помощью которого я могу передать дескриптор Main Window в мой поток, чтобы с помощью этой Handle Thread мог опубликовать сообщение. Ниже приведен фрагмент кода для любой помощи:Paasing Окно Обращение к потоку в C. (WIN32 API)
///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, а Handle to window является HWND-типом, поэтому я не могу передать Window Handle в качестве аргумента функции потока. :( – Ayse
Аргумент аргумента имеет тип LPVOID, то же, что и HANDLE. –