0

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

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

4

2 回答 2

1

首先:如果不为按钮控件声明变量,您将无法运行它!

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

是的,您可以使用 GetDlgItem 并且我对 CColorButton 进行了强制转换,但这非常危险!为什么?你得到的 window 对象只是一个临时的 CWnd 对象,没有额外的成员变量。如果您调用 CColorButton 的特定成员函数,该函数使用额外的数据成员,您可能会破坏您的内存/堆/堆栈内容。

使用 MFC 控件类,您总是需要内存中某处的特定对象来巧妙地转换 GetDlgItem 返回的指针!

如果您有成员函数,则不需要演员表。如果(出于任何其他原因)您需要强制转换 CWnd 指针,明智的做法是在出现问题时使用 STATIC_DOWNCAST/DYNAMIC_DOWNCAST 来获取 ASSERT。

于 2013-11-11T13:20:58.643 回答
0

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

于 2013-11-11T14:22:30.133 回答