Когда я создаю окно с именем'A 'функцией CreateWindow, окно «A» перестает отвечать, но может нарисовать его, прежде чем он не ответит.Зачем создавать окно не отвечает?
Когда я нажимаю «Войти»
unsigned __stdcall ThreadFunc(void *lParam) {
pMsgHead pmsgHead = new MsgHead;
while (RecvMsg(ConnectSocket,pmsgHead,sizeof(MsgHead))) {
switch (pmsgHead->dwCmd) {
case WM_SIGN_IN:
g_hMain=CreateWindow(szMainClass, L"A", WS_OVERLAPPEDWINDOW,
200, 200, 250, 500, 0, 0, hInst, nullptr);
ShowWindow(g_hMain, SW_SHOW);
UpdateWindow(g_hMain);
break;
case WM_BROADCAST:
//DrawText()
break;
}
}
_endthreadex(0);
return 0;
}
Но когда я нажимаю на кнопку «Зарегистрироваться», он будет работать.
case IDB_SIGN_UP:
g_hSignUp = CreateWindow(szSignUpClass, L"Sign Up", WS_OVERLAPPEDWINDOW,
800, 200, 300, 300, 0, 0, hInst, nullptr);
ShowWindow(g_hSignUp, SW_SHOW);
UpdateWindow(g_hSignUp);
break;
case IDB_SIGN_IN:
{
TCHAR uname[20], psd[20];
GetWindowText(g_hSignInuname, uname, 20);
GetWindowText(g_hSignInpsd, psd, 20);
pMsgHead pmsgHead = new MsgHead;
pmsgHead->dwCmd = WM_SIGN_IN;
wcscpy_s(pmsgHead->tszbuf, uname);
wcscat_s(pmsgHead->tszbuf, L",");
wcscat_s(pmsgHead->tszbuf, psd);
SendMsg(ConnectSocket, pmsgHead, sizeof(MsgHead));
break;
}
Я просто использовать в то время как цикл в функции GetMessage в главном потоке и RecvMsg в выше, я использую пошагово отлаживать программу, один поток будет ждать в
while(RecvMsg())Главный поток будет работать 'break' в
case IDB_SIGN_IN:, тогда верните 0, если я по-прежнему использую одноэтапную отладку, он не будет загружен «wuser32.pdb»
Вы создаете это окно из другого потока (а не _main_ one)? Вы не можете ... –
@Adriano: Нет такой вещи, как * основная * нить. – IInspectable
@Inspectable Давайте назовем его _UI_ нитью, если вы предпочитаете или - лучше - нить, где hInst был создан. В общем, пользовательский интерфейс является однопоточным, поэтому поток _main_ является видом _simplification_. –