MFC设置OwnerDraw
时间: 2023-07-04 22:15:21 浏览: 77
在 MFC 中,设置一个控件为 OwnerDraw 的方法与 Delphi 中类似。具体步骤如下:
1. 将控件的 Style 设置为 BS_OWNERDRAW,例如:
```cpp
m_button1.SetButtonStyle(BS_OWNERDRAW);
```
2. 在控件的消息响应函数 OnDrawItem 中绘制控件的内容,例如:
```cpp
void CMyDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
if (lpDrawItemStruct->CtlType == ODT_BUTTON)
{
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
CRect rect(lpDrawItemStruct->rcItem);
// 在这里绘制按钮的内容
dc.DrawFrameControl(rect, DFC_BUTTON, DFCS_BUTTONPUSH);
dc.DrawText(_T("Button"), rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
dc.Detach();
}
}
```
在 OnDrawItem 函数中,我们首先判断控件类型是否为按钮(这里只是一个示例,实际上可以处理多种类型的控件),然后获取绘图设备的句柄和绘图区域的矩形,最后在矩形中绘制按钮的背景、边框、文本等内容。
需要注意的是,MFC 中的 OnDrawItem 函数是一个消息响应函数,当控件需要绘制时,Windows 消息循环会调用该函数。因此,在设置 OwnerDraw 属性后,我们需要在消息映射表中添加相应的映射关系,例如:
```cpp
BEGIN_MESSAGE_MAP(CMyDlg, CDialogEx)
ON_WM_DRAWITEM()
END_MESSAGE_MAP()
```
`ON_WM_DRAWITEM()` 宏会将 OnDrawItem 函数与 WM_DRAWITEM 消息关联起来,从而实现绘制消息的捕获和处理。
希望这能够帮助你在 MFC 中设置 OwnerDraw 控件。
阅读全文