【问题标题】:How to draw on standart button WinApi如何在标准按钮 WinApi 上绘图
【发布时间】:2021-07-10 06:55:07
【问题描述】:

我想在按钮上画一个简单的正方形。

我在其中创建了一个常规窗口和一个常规按钮。现在,在我的窗口的窗口过程中,在WM_PAINT 消息中,我得到了我的按钮的HDC 并绘制了一个正方形:

LRESULT CALLBACK WndProc(HWND   hWnd, UINT   message, WPARAM wParam, LPARAM lParam)
{

    if (message == WM_PAINT)
    {
        PAINTSTRUCT ps;
        HDC my_hdc = BeginPaint(hWnd, &ps);


        //---------------------------------------------
        HDC my_button_HDC = GetDC(GetDlgItem(hWnd, 11));  //Get HDC my button

        Rectangle(my_button_HDC, 5, 5, 30, 30);
        //---------------------------------------------


        EndPaint(hWnd, &ps);
}


WinMain()
{
//standart code create window and button...
}

创建窗口时,按钮上不会出现正方形。仅当我将窗口向下移到屏幕外并将其抬起时才会出现。

但是,只要我调整窗口大小或单击按钮,方块就会再次消失。

我不明白为什么会这样。

【问题讨论】:

  • IInspectable,遗憾的是不明白它是如何解决问题的,问题是什么。
  • 问题是按钮会自己绘制并抹掉您绘制的内容。要更改控件的外观,您需要对其进行子类化,以便拦截绘画消息并修改其行为。
  • Jonathan Potter,谢谢,请告诉我,我在哪里可以看到一个例子,需要截取什么消息以及如何重新配置​​?

标签: c++ winapi gdi


【解决方案1】:

只有在绘制其窗口时,您才在按钮上绘图(另外,您正在泄漏按钮的HDC)。调整窗口大小并不总是会触发重绘。

但即使它这样做了,当按钮本身绘制自身时,它也会绘制你已经绘制的任何东西。

在标准 Win32 按钮上绘制的正确方法是:

【讨论】:

    猜你喜欢
    • 2014-06-27
    • 2021-02-15
    • 2011-07-22
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多