您的位置:程序门 -> vc/mfc -> 界面



弱弱地问一下如何改变sdi的背景颜色?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


弱弱地问一下如何改变sdi的背景颜色?[已结贴,结贴人:skypu]
发表于:2007-02-26 15:51:25 楼主
弱弱地问一下如何改变sdi的背景颜色
我搜索以前的主题没有找到...
发表于:2007-02-26 16:20:311楼 得分:0
重写onerasebkgnd(cdc*   pdc)函数,注释掉原来所有的,改成如下

crect   rc;
getclientrect(&rc);
pdc-> fillsolidrect(rc,   rgb(192,   192,   192));

return   true;
发表于:2007-02-26 16:51:282楼 得分:0
系统在发出wm_paint消息之前,会发出wm_erasebkgnd消息,去执行真正的刷新背景的操作,在wm_erasebkgnd的相应函数里用fillrect就可以了
发表于:2007-02-26 16:58:073楼 得分:0
重载onctlcolor
返回画刷的即可
hbrush   cmodialog::onctlcolor(cdc*   pdc,   cwnd*   pwnd,   uint   nctlcolor)
{

if((nctlcolor   ==   ctlcolor_dlg)   &&   _useskin   !=   nouse)
{
return   cdrawbackimage::m_brush;
}
else   if(((nctlcolor   ==   ctlcolor_static)   ¦ ¦   (nctlcolor   ==   ctlcolor_btn))   &&   _useskin   !=   nouse)
{
cbrush   brush;
pdc-> setbkmode(transparent);
brush.createstockobject(null_brush);
return   brush;
}
return   cdialog::onctlcolor(pdc,   pwnd,nctlcolor);
}
发表于:2007-02-26 17:04:104楼 得分:0
楼上的,他说的是sdi哦,应该是view,不是dialog,我不知道view有ctlcolor么。好像没有吧
发表于:2007-02-26 17:07:375楼 得分:0
有问题
这样会不会闪烁?
非常自暴自弃的方法就是在onpaint里面直接刷背景
但是闪烁很厉害的
我记得有一个方法是设置窗口风格什么的
在api程序设计里面是通过设置windowclass类对象
在mfc里面有没有?
发表于:2007-02-27 08:35:336楼 得分:10
偶终于懂你的意思了
方法如下:(已经过测试)

bool   cxxxxview::precreatewindow(createstruct&   cs)
{
//   todo:   modify   the   window   class   or   styles   here   by   modifying
//     the   createstruct   cs
//不要在ondraw里绘制背景色,因为这样会使图像在刷新时闪烁
cview::precreatewindow(cs);      
wndclass       wndclass;      
::getclassinfo(afxgetinstancehandle(),cs.lpszclass,&wndclass);      
wndclass.lpszclassname= "newviewname ";      
wndclass.hbrbackground=createsolidbrush(rgb(128,128,128));      
verify(afxregisterclass(&wndclass));      
cs.lpszclass=wndclass.lpszclassname;      
return       true;      
// return   cview::precreatewindow(cs);
}
发表于:2007-02-27 08:38:557楼 得分:0
顶下!
发表于:2007-02-27 09:12:558楼 得分:0
谢谢   dazedase(什么也不懂,什么也不会,所以我很菜)(▲▲▲▲)(★★★)   (   )  
我也找到一个方法
在precreatewindow()里面直接加上一句
cs.lpszclass   =   afxregisterwndclass(null,   loadcursor(null,   idc_arrow),   (hbrush)getstockobject(black_brush));
就好了
结帖


快速检索

最新资讯
热门点击