【问题标题】:C++ GUI window has shapes drawn that the code isn't supposed to drawC++ GUI 窗口绘制了代码不应该绘制的形状
【发布时间】:2018-01-12 11:07:01
【问题描述】:

我正在使用 GUI 库制作井字游戏。我将我的游戏数据存储在一个称为 CP 的二维数组中。在CP中,0为空槽,1为O,2为X。清空CP后,重新绘制棋盘,使数组等于:

000 000 000

窗口看起来像这样,其中的那些代表之前存在的 X 或 O:

010 101 010

这里附上重置CP,刷板的代码:

switch( message )
{

case WM_PAINT:
    {

        HDC hdc;
        PAINTSTRUCT ps;
        hdc = BeginPaint( hwnd, &ps );

        Rectangle( hdc, 0, 0, 200, 200 );
        Rectangle( hdc, 200, 400, 0, 600 );
        Rectangle( hdc, 600, 0, 400, 200 );
        Rectangle( hdc, 600, 400, 400, 600 );
        Rectangle( hdc, 200, 200, 400, 400 );

        for(int i = 0; i < 3; i++) {
            for(int j = 0; j < 3; j++) {
                if(CP[i][j] == 1) {
                    Ellipse(hdc, 200 * i, 200 * j, 200 * (i + 1), 200 * (j + 1));
                }
                if(CP[i][j] == 2) {
                    MoveToEx(hdc, 200 * i, 200 * j, NULL);
                    LineTo(hdc, 200 * (i + 1), 200 * (j + 1));
                    MoveToEx(hdc, 200 * (i + 1), 200 * j, NULL);
                    LineTo(hdc, 200 * i, 200 * (j + 1));
                }
            }
        }

        EndPaint( hwnd, &ps );
    }
    return 0;
    break;

case WM_KEYDOWN:
    for(int b = 0; b < 3; b++) {
        for(int c = 0; c < 3; c++) {
            CP[c][b] = 0;
        }
    }
    std::cout << "RESET\n";
    RedrawWindow(hwnd, NULL, NULL, RDW_INVALIDATE);
    turn = 1;
    break;

【问题讨论】:

    标签: c++ windows user-interface winapi


    【解决方案1】:

    要么

    1. 使用RedrawWindow(hWnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE); 告诉 Windows 擦除背景
    2. 自己擦除所有网格背景。目前,您为其中五个单元格绘制填充矩形以创建网格,四个未擦除的单元格是网格中您未填充背景的单元格 - 将画笔更改为不同的颜色会使这一点变得明显:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-24
      • 2017-02-03
      • 2021-01-10
      • 2011-04-01
      • 2012-03-09
      相关资源
      最近更新 更多