如何会出现按钮呢

怎么会出现按钮呢
要接受鼠标和键盘接受,按钮必须是可见和可用的。





void CMyButton::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CButton::OnPaint()


//CRect rect;
//GetClientRect(&rect);
//CBrush brush(RGB(255,0,0));
//dc.FillRect(&rect,&brush);


}

 如此覆盖 onpaint,自然是看不到按钮的,非常自然合理。

戏剧性的事情发生了


在按钮所在区域后,居然弹出一个消息框来。

void CfgfDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
MessageBox("xx",NULL,MB_YESNO);
}


弹出后MessageBox,按钮再现。什么原因?


CPaintDC的工作仅仅是从消息队列中除去wm_paint和 擦出背景的作用. 并不会绘制按钮


怎么会按钮在现呢

------解决方案--------------------
可能在某些消息中会GetDC来画,所有这些消息都得自己处理
------解决方案--------------------
如此覆盖 onpaint,自然是看不到按钮的,非常自然合理。

这太错误了。系统给你一个区域画按钮,你没画而已。
------解决方案--------------------
引用:
引用:如此覆盖 onpaint,自然是看不到按钮的,非常自然合理。

这太错误了。系统给你一个区域画按钮,你没画而已。

要接受鼠标和键盘接受,按钮必须是可见和可用的。

是windows 程序设计说的,
9.1.9

也就说,但看不见按钮 时候,你点击是无效的。

结果弹出messagebox,说明这……


楼主误解了吧如何会出现按钮呢

可见是指WS_VISIBLE,与没画出来而看不见是有区别的

------解决方案--------------------
引用:
引用:引用:如此覆盖 onpaint,自然是看不到按钮的,非常自然合理。

这太错误了。系统给你一个区域画按钮,你没画而已。

要接受鼠标和键盘接受,按钮必须是可见和可用的。

是windows 程序设计说的,
9.1.9

也就说,但看不见按钮 时候,你点击是……

正解。你看不见不代表不可见。
------解决方案--------------------
“ return DefWindowProc(hwnd,msg,wp,lp);”改为:
return CallWindowProc(OldButtonProc,hwnd,msg,wp,lp);