SendMessage(WM_DRAWITEM...)?
一个对话框,有个按钮,
按钮的Style 是 BS_ICON|BS_OWNERDRAW,
我在一个程序中修改了按钮的Icon,但是论理DrawItem 是不会自动促动的,
所以我要SendMessage...
但是第二,第三个参数如何设置呢?
问题点数:20、回复次数:7Top
1 楼ni_ch(泥巴)回复于 2001-07-24 19:32:23 得分 0
谢谢Top
2 楼ShyWJB(家宝)回复于 2001-07-24 22:22:42 得分 0
如果想自绘一个控件,一般要从控件类中继承一个新的控件,在新控件OnDrawItem中处理自绘,这个函数的LPDRAWITEMSTRUCT lpDrawItemStruct参数里面有该控件的DC,你的这种想法没试过,我这就试试,不管结果如何,再这里回复你
Top
3 楼ShyWJB(家宝)回复于 2001-07-24 22:35:18 得分 0
还是从CButton继承新类吧!下面是从CButton类的实现文件中摘录下来的
// Derived class is responsible for implementing all of these handlers
// for owner/self draw controls
void CButton::DrawItem(LPDRAWITEMSTRUCT)
{
ASSERT(FALSE);
}
BOOL CButton::OnChildNotify(UINT message, WPARAM wParam, LPARAM lParam,
LRESULT* pResult)
{
if (message != WM_DRAWITEM)
return CWnd::OnChildNotify(message, wParam, lParam, pResult);
ASSERT(pResult == NULL); // no return value expected
UNUSED(pResult); // unused in release builds
DrawItem((LPDRAWITEMSTRUCT)lParam);
return TRUE;
}
Top
4 楼azuo_lee(宿醉)回复于 2001-07-24 22:45:03 得分 0
<<我在一个程序中修改了按钮的Icon,但是论理DrawItem 是不会自动促动的,
<<所以我要SendMessage...
恰恰相反,DrawItem消息是由Windows在需要绘制控件时“自动”发送给你的窗口的,它会设置好第二第三个参数的。你不必发送此消息,你要做的只是在Button所在的父窗口中接管OnDrawItem(如果你使用的是标准的CButton类)或是在Button自己的类中重载DrawItem(如果你是自己从CButton派生了一个类)来完成绘制工作即可。
Top
5 楼ni_ch(泥巴)回复于 2001-07-24 23:26:09 得分 0
to azuo_lee():
你没有明白我的意思,我给按钮设置了一个宽、高,在程序运行时可以让用户修改,这时必须我来手动发消息,系统以为没有必要,其实有必要
我已经重载了DrawItem(...),现在问题是我想自由的调用他,而不是由系统!!Top
6 楼ShyWJB(家宝)回复于 2001-07-24 23:34:30 得分 10
你可以在控件类中Invalidate,再UpdateWindow强制更新不就让系统自动发送你要求的消息了吗Top
7 楼azuo_lee(宿醉)回复于 2001-07-24 23:35:26 得分 10
强制重绘可由RedrawWindow或UpdateWindow来实现。Top




