我正在制作一款井字游戏作为我的第一个 win32 应用程序,并且进展顺利。在第一轮结束之前,我已经完成了所有工作,井字游戏板上的每个方块都是一个按钮,当点击它时,它会根据轮到谁变成 X 或 O。当一个玩家赢得比赛时,我在井字棋盘下方显示了一个小窗口,上面写着“玩家 1 获胜”。我还在屏幕底部制作了一个“新游戏”按钮,当点击该按钮时,所有的 X 和 O 都会从板上清除并重新开始游戏。
所以这是我的问题,当我点击“新游戏”按钮时,我无法让显示“PLAYER 1 WINS”的窗口像其他所有东西一样消失,它只是停留在那里。我想让它消失。这是我的一些代码:
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;}
那是处理逻辑部分(我知道它很混乱,这是我第一次尝试)。因此您可以看到,当“determinewinner”函数返回 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 函数,但这当然也不起作用。
我怎样才能关闭窗口?谢谢!
编辑*所以我忘了说当我运行它时,它在单击 NEW GAME 按钮之前一直很好,它说 hwndb 尚未初始化,这对于 switch 语句的特定部分当然是正确的,所以我'显然做错了。我怎样才能做到正确?