【问题标题】:Windows Procedure If Else statement doesn't work for messageWindows 过程 If Else 语句不适用于消息
【发布时间】:2010-12-26 23:20:07
【问题描述】:

我目前正在尝试为某些软件制作 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++ 语言时的一个简单错误,因为我找不到问题。请帮忙,谢谢。

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

【问题讨论】:

    标签: c++ windows winapi api procedure


    【解决方案1】:
    1. 在编译器中打开警告。
    2. 请注意,在这两种情况下,您都在使用赋值 (=) 而不是比较 (==)。

    【讨论】:

    • +1 用于建议警告。但是,您的意思不是“提高警告级别”,而不仅仅是“启用警告”吗?
    【解决方案2】:

    这是你的问题。

    if (hwnd = ANNwindow->settingsborder)
    

    应该是

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

    else if 语句也是如此。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-26
      • 2022-01-25
      相关资源
      最近更新 更多