我正在製作一個井字棋遊戲,作爲我第一次使用win32的應用程序,並且它相當不錯。我已經完成了所有工作,直到第一輪結束,每個棋盤上的每個方塊都是一個按鈕,當點擊成爲一個X或O時,它就是基於它的輪換。當一名球員贏得比賽時,我在井字遊戲板下方出現了一個小窗口,顯示「玩家1贏」。我還在屏幕底部製作了一個「新遊戲」按鈕,點擊後,所有X和O的棋子都被從棋盤上清除,遊戲重新開始。完成遊戲後重置屏幕win32 C++
所以,這裏是我的問題,當我點擊「新遊戲」按鈕,我不能讓窗口說「玩家1贏」離開一切,它只是呆在那裏。我希望它消失。這裏是我的一些代碼:
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_LOC1:
click1++;
if(click1>1)
{break;}
else{
playerobject++;
if(playerobject==1|playerobject==3|playerobject==5|playerobject==7|playerobject==9)
{ SetDlgItemText(hWnd, IDM_LOC1, "X");
loc1 = 1; }
else
{ SetDlgItemText(hWnd, IDM_LOC1, "O");
loc1 = 2; }
winner = determinewinner();
if(winner==1)
{
hwndb = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW,TEXT("STATIC"),TEXT("PLAYER 1 WINS!"),WS_CHILD|SS_CENTER|WS_VISIBLE,20,210,210,18,hWnd,HMENU(NULL),GetModuleHandle(NULL),NULL);
}
else if (winner==2)
{
hwndb = CreateWindowEx(WS_EX_OVERLAPPEDWINDOW,TEXT("STATIC"),TEXT("PLAYER 2 WINS!"),WS_CHILD|SS_CENTER|WS_VISIBLE,20,210,210,18,hWnd,HMENU(NULL),GetModuleHandle(NULL),NULL);
}
break;}
這是處理邏輯部分(我知道它非常凌亂,它是我第一次去它)。所以你可以看到,當「判斷者」函數返回1時,窗口顯示說明玩家1已經贏了。 現在,這裏是代碼處理「新遊戲」按鈕:
case IDM_RESTART:
SetDlgItemText(hWnd, IDM_LOC1, "");
SetDlgItemText(hWnd, IDM_LOC2, "");
SetDlgItemText(hWnd, IDM_LOC3, "");
SetDlgItemText(hWnd, IDM_LOC4, "");
SetDlgItemText(hWnd, IDM_LOC5, "");
SetDlgItemText(hWnd, IDM_LOC6, "");
SetDlgItemText(hWnd, IDM_LOC7, "");
SetDlgItemText(hWnd, IDM_LOC8, "");
SetDlgItemText(hWnd, IDM_LOC9, "");
playerobject = 0;
click1=0;
click2=0;
click3=0;
click4=0;
click5=0;
click6=0;
click7=0;
click8=0;
click9=0;
loc1=0,loc2=0,loc3=0,loc4=0,loc5=0,loc6=0,loc7=0,loc8=0,loc9=0;
DestroyWindow(hwndb);
break;
現在我認爲這個問題是switch語句,因爲他們兩人都是WndProc中switch語句(該WM_COMMAND部分)下只是個案。我嘗試將hwndb窗口移到winmain函數中,然後在switch語句中執行ShowWindow函數,但這當然不起作用。
我怎樣才能讓窗戶關閉?謝謝!
編輯 *所以,我忘了說,當我運行它,它新的遊戲按鈕被點擊後,纔會很好,它說,hwndb尚未初始化,這當然是對特定真switch語句的一部分,所以我明顯做錯了。我該如何做對嗎?
hwndb是一個全局變量嗎? –
不,它不是一個全局變量,它只在WndProc函數中聲明,但是當我將它作爲一個全局變量時,它完美地工作,謝謝! – Riley