如题我在OnPaint()中画背景(用双缓冲无闪烁),但是这样刷新的时候按钮就会消失所以我在该函数画完背景后
用GetDlgItem(IDC_B_SEND)->Invalidate();令按钮重刷一遍,
这是是可以解决按钮消失问题但是,这样就造成了我动一下窗口,界面上的所以按钮都在动(背景没闪,因为我用双缓冲)怎么解决这个问题??请高手指点》》》》》》》
用GetDlgItem(IDC_B_SEND)->Invalidate();令按钮重刷一遍,
这是是可以解决按钮消失问题但是,这样就造成了我动一下窗口,界面上的所以按钮都在动(背景没闪,因为我用双缓冲)怎么解决这个问题??请高手指点》》》》》》》
解决方案 »
- 网络结构,求解决方案?
- CTreeCtrl的OnSelchangedTree1和OnSelchangingTree1
- 请问在VC程序中,如何在工具栏中加入一个能弹出菜单的按钮(像资源管理器工具栏中的查看按钮一样)
- 如何将char *aa[30]中的aa转换成一个CString?
- 请教CSocket在多线程下的问题
- 关于话框中CEdit控件中输入数据的问题,好简单的哦,先解决的马上结分
- 关于列表框的一个问题
- 写串口函数调用成功,但串口没收到数据?是什么原因?
- 关于多字节字符编码问题再问!
- 想作一个程序,弹出对话框同时放声音,单击ok时停止放声音。怎么写?
- 如何改变控件自动产生的滚动条为XP型或用位图改变!
- 在Edit中如何回车换行?
所以用了GetDlgItem(IDC_B_SEND)->Invalidate();令界面上所有的按钮重刷一遍导致按钮闪,我是想问有什么办法可以使按钮又可以浮在背景最上面,又可以不用在OnPaint()中使用GetDlgItem(IDC_B_SEND)->Invalidate();
CRgn clipRgn;
clipRgn.CreateRectRgnIndirect(&rcClient);
pDC->SelectClipRgn(&clipRgn);
pDC->ExcludeClipRect(&rcButton);
GetClientRect(hwnd,&rcClient);
HRGN hrgn=CreateRectRgn(rcClient.left,rcClient.top,rcClient.right,rcClient.bottom);
SelectClipRgn(hdc,hrgn);
ExcludeClipRect(hdc,rcClient.left,rcClient.top,rcClient.right,rcClient.bottom);//在这里加上你自己的绘制code注: 这是一种简单的情况:即将绘制的window和button都是矩形的.
如果你将button设为圆形的,那会怎么样呢?你自己可以试试看.
什么都不用,一定是你画错了。你是在CPaintDC中画的还是在CClientDC或CWindowDC中画的?另外你可以指定父窗口的属性为WM_CLIPCHILD.这样在画父窗口的时候就不会画它里面子窗口中的部分了。应该不是吧
psbeond(psbeyond) ( ) 信誉:98 2006-3-18 20:36:15 得分: 0
什么都不用,一定是你画错了。你是在CPaintDC中画的还是在CClientDC或CWindowDC中画的?另外你可以指定父窗口的属性为WM_CLIPCHILD.这样在画父窗口的时候就不会画它里面子窗口中的部分了。应该不是吧
是的。其实你只要在Button中画Button,在父窗口中画父窗口就可以了。最多就是有闪烁,不可能被盖住的。看一下我的界面库就知道了。
ModifyStyle( WS_CAPTION,
WS_SYSMENU | WS_MINIMIZEBOX | WS_CLIPCHILDREN,
SWP_DRAWFRAME );我已经设置过对话框的属性
这样的属性不行吗?我是在::OnPaint()中画背景及更新一些按钮的
在该函数中用CDC *pDC = GetWindowDC();
然后用双缓冲画图,背景重画不闪,只是在该函数中我也要相应更新位图按钮,
例如:m_MAbout.Invalidate();
这样每次刷新背景,这个按钮都会先变灰,再画上图
所以感觉界面很闪
CRect rect;
GetClientRect(&rect);
CRgn rgnWin;
DrawMainDlgBK(dc, rect, rgnWin);//根据图片处理rgnWin
SetWindowRgn(rgnWin,TRUE);
造成的?而这东西又不能放在OnInitDialog()里,因为OnInitDialog里没有CPaintDC,
怎么办?
因为SetWindowRgn会改变窗口 ,一改变窗口就会调用OnPaint重绘一次 。
然后OnPaint又调用SetWindowRgn(..) 结果可能会导致循环 。 。 。 。窗口拉大缩小的话, 可以重载OnSize(...) ,每次窗口大小变换的时候都会调用这个函数。