【问题标题】:Create or remove GDI shapes on command根据命令创建或删除 GDI 形状
【发布时间】:2012-11-08 03:47:24
【问题描述】:

我正在创建一个 win32 应用程序。在主窗口上有 5 个按钮。每个按钮前面都有一个小圆圈。 (使用 GDI 工具。在 WM_PAINT 的情况下)。现在当我按下一个按钮时,它前面的圆圈应该是红色的。我该怎么做。

如果我们在任何时候创建一个编辑框,我们都可以使用 SendMessege 更改其上的文本。像这样可以更改之前绘制的形状的颜色。

谁能给我一个建议。

case WM_PAINT:
    {
    PAINTSTRUCT ps;
    HDC hDC;
    HBRUSH brusha;

    hDC=BeginPaint(hWnd,&ps);       
    brusha=CreateSolidBrush(RGB(0,255,0));
    SelectObject(hDC,brusha);
    Ellipse(hDC, 20, 20, 50, 50);
    DeleteObject(brusha);
    EndPaint(hWnd, &ps);
    }

 case WM_COMMAND:
      switch(LOWORD(wParam))
        {
            case BUTTON:
            {
             //here I need to change the above drawn corcle to be red.
            }
        }

【问题讨论】:

  • 有很多方法可以做到这一点。你用的是什么语言 C++?
  • @TonyHopkinson 是的,我正在使用 C++。
  • @TonyHopkinson 所以请给我一个关于如何做这种事情的建议。
  • @TonyHopkinson 我正在等待您的帮助。我正在使用 c++,mingw 编译器。请解释我如何做到这一点。我用谷歌搜索了这个并参考了一些教程,但对此一无所知。
  • 会出现 Mark Ransom 已将您指向的方向,我现在已经看到了您拥有的代码。单击更改颜色并强制重新绘制。几乎所有语言都应该这样做。

标签: c++ winapi gdi


【解决方案1】:

您无法更改已绘制图像的颜色,但可以重新绘制它。使用 Windows 函数 InvalidateRect 告诉控件它需要重新绘制,您将再次调用您的 WM_PAINT 处理程序。在处理程序中,在绘制圆圈之前选择所需的颜色。

【讨论】:

  • 我在上面添加了我的代码。你能教我如何将它添加到上面的代码中
  • @LakshanPerera,创建一个包含当前颜色的变量。将颜色初始化为绿色。在WM_COMMAND 处理程序中将变量设置为红色,然后调用InvalidateRect
  • @MarkRanson 在上面的代码中,以防 BUTTON 我添加了这行 brusha=CreateSolidBrush(RGB(255,0,0)); InvalidateRect(hWnd,NULL,false); 它编译没有错误。但是当按钮单击时没有任何反应。
  • enyway 这个答案给了我一个想法,我尝试一些实验并找到一种方法。感谢帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-17
  • 2022-12-26
  • 1970-01-01
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多