0

我目前正在尝试为某些软件制作 GUI,但我遇到了一些静态控件的问题。在我的 Windows 程序中,我有 WM_CTLCOLORSTATIC 消息用于绘制静态控件的时间。在消息中,我有一个 IF ELSE 语句,它将窗口的句柄与需要绘制的句柄进行比较,并相应地执行窗口功能。一种是静态文本控件,在绘制时设置了背景颜色,而另一种是绘制静态控件的边框。

    case WM_CTLCOLORSTATIC:
    {
        if (hwnd = ANNwindow->settingsborder)
        {
            SetBkMode((HDC)wParam, TRANSPARENT);
            return (LRESULT)ANNwindow->backgroundbrush;
        }
        else if (hwnd = ANNwindow->settingstext)
        {
            DrawEdge((HDC)wParam, &ANNwindow->rect, EDGE_ETCHED, BF_BOTTOMRIGHT);
            return (LRESULT)ANNwindow->backgroundbrush;
        }

    }

settingsborder 和 settingstext 是我班级中用于创建 GUI 的窗口句柄。

如果我颠倒 if else 语句的顺序,它只会执行第一个,无论顺序如何。如果更改背景颜色是在 IF 下,它会这样做。如果在 IF 下绘制边框,那么它会这样做,但不会在 else 部分下。这是使用 C++ 语言时的一个简单错误,因为我找不到问题。请帮忙,谢谢。

PS对于drawedge部分,我先创建一个静态控件边框,然后在上面使用drawedge,我应该用不同的方式吗?谢谢。

4

2 回答 2

4
  1. 在编译器中打开警告。
  2. 请注意,在这两种情况下,您都使用了赋值 ( =) 而不是比较 ( ==)。
于 2010-12-26T23:24:18.973 回答
3

这是你的问题。

if (hwnd = ANNwindow->settingsborder)

应该

if (hwnd == ANNwindow->settingsborder)
//       ^^

声明也是else if如此。

您正在将 的内容分配ANNwindow->settingsborder给您的hwnd,该操作几乎总是返回true而不是进行相等测试。

于 2010-12-26T23:23:27.923 回答