更改按钮颜色而不声明成员变量

时间:2013-11-11 12:22:04

标签: c++ c mfc visual-c++

我正在尝试使用CColorbutton类函数setcolor为按钮着色。我已经声明了按钮的成员变量,但是当我直接通过GetDlgItem(IDC_BUTTON1)获取句柄时,它工作正常。谁能告诉我解决方案呢?

CColorButton * pWnd =(CColorButton *)GetDlgItem(id + i); pWnd-> SetColor(RGB(0,0,0),RGB(200,153,204));

2 个答案:

答案 0 :(得分:1)

首先:如果没有为按钮控件声明变量,就不会让它运行!

为什么呢?一个窗口变量和使用DDX-Control或使用CWNd :: SubclassWindow的方式,子类在MFC中工作。如果没有子类化,则消息不会被CCOlorButton中使用的代码处理。

是的,你可以使用GetDlgItem,我对CColorButton进行了强硬演员,但这非常危险!为什么?您获得的窗口对象只是一个临时的CWnd对象,没有其他成员变量。如果调用CColorButton的特定成员函数,它使用其他数据成员,则可能会破坏内存/堆/堆栈内容。

使用MFC控件类,你总是需要在内存中的某个特定对象来完全抛出GetDlgItem返回的指针!

如果您有成员函数,则不需要演员表。如果(由于任何其他原因)你需要强制转换CWnd指针,最好使用STATIC_DOWNCAST / DYNAMIC_DOWNCAST在出现错误时获取ASSERT。

答案 1 :(得分:0)

如果您没有声明并正确初始化CColorButton变量,那么程序中没有CColorButton对象。所以你在呼唤一些不存在的东西。您要求解决此问题,但您已经知道了解决方案!