我正在尝试使用 CColorbutton
类函数 setcolor
为按钮着色。当我声明了按钮的成员变量时它工作正常但是当我直接通过 GetDlgItem(IDC_BUTTON1)
获取句柄时它不工作。谁能告诉我这个问题的解决方案?
CColorButton* pWnd = (CColorButton*)GetDlgItem(id+i); pWnd->SetColor(RGB(0,0,0),RGB(200, 153, 204));
最佳答案
首先:如果不为按钮控件声明变量,您将无法运行它!
为什么?窗口变量并使用 DDX-Control 或使用 CWNd::SubclassWindow 是在 MFC 中进行子类化的方式。如果没有子类化,则消息不会由 CCOlorButton 中使用的代码处理。
是的,您可以使用 GetDlgItem 和我对 CColorButton 进行硬转换,但这非常危险!为什么?你得到的 window 对象只是一个临时的 CWnd 对象,没有额外的成员变量。如果您调用 CColorButton 的特定成员函数,它使用额外的数据成员,您可能会破坏您的内存/堆/堆栈内容。
对于 MFC 控件类,您总是需要内存中某处的特定对象来优雅地转换 GetDlgItem 返回的指针!
如果您有成员函数,则不需要强制转换。如果(出于任何其他原因)您需要转换 CWnd 指针,明智的做法是在出现问题时使用 STATIC_DOWNCAST/DYNAMIC_DOWNCAST 获取 ASSERT。
关于c++ - 在不声明成员变量的情况下更改按钮颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19906251/