我正在尝试使用CColorbutton
类函数setcolor
为按钮着色。我已经声明了按钮的成员变量,但是当我直接通过GetDlgItem(IDC_BUTTON1)
获取句柄时,它工作正常。谁能告诉我解决方案呢?
CColorButton * pWnd =(CColorButton *)GetDlgItem(id + i); pWnd-> SetColor(RGB(0,0,0),RGB(200,153,204));
答案 0 :(得分:1)
首先:如果没有为按钮控件声明变量,就不会让它运行!
为什么呢?一个窗口变量和使用DDX-Control或使用CWNd :: SubclassWindow的方式,子类在MFC中工作。如果没有子类化,则消息不会被CCOlorButton中使用的代码处理。
是的,你可以使用GetDlgItem,我对CColorButton进行了强硬演员,但这非常危险!为什么?您获得的窗口对象只是一个临时的CWnd对象,没有其他成员变量。如果调用CColorButton的特定成员函数,它使用其他数据成员,则可能会破坏内存/堆/堆栈内容。
使用MFC控件类,你总是需要在内存中的某个特定对象来完全抛出GetDlgItem返回的指针!
如果您有成员函数,则不需要演员表。如果(由于任何其他原因)你需要强制转换CWnd指针,最好使用STATIC_DOWNCAST / DYNAMIC_DOWNCAST在出现错误时获取ASSERT。
答案 1 :(得分:0)
如果您没有声明并正确初始化CColorButton变量,那么程序中没有CColorButton对象。所以你在呼唤一些不存在的东西。您要求解决此问题,但您已经知道了解决方案!