怎么改变对话窗标题栏的改变颜色呢?自己重载了WM_NCPAIN消息,但是拖动窗口的话,就又变回去了,不知道怎么弄了。 这个问题已经困扰了我好久,希望大牛们教教我。能有源码最好,邮箱是[email protected] 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 拖动的时候还会触发WM_NCPAIN消息吗? 调试的时候,发现拖动的时候并没有触发...重载WM_MOVE后,拖动的时候,整个对话框都黑了(PS:我把标题栏改为黑色了) "发现拖动的时候并没有触发",那就在拖动的时候用PostMessage发送WM_NCPAIN,试试 LRESULT CWarningDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam){ // TODO: Add your specialized code here and/or call the base class if (message==WM_MOVE||message==WM_PAINT||message==WM_NCPAINT||message==WM_NCACTIVATE ||message == WM_NOTIFY) { DrawTitleBar(); } return CDialog::DefWindowProc(message, wParam, lParam); }我这样改了,但是拖动的时候,整个对话框客户区和非客户区全部便黑了... DrawTitleBar();代码怎么写的? CRect titleRect, rect; //计算标题栏的坐标区域 this->GetWindowRect(&titleRect); rect.left = GetSystemMetrics(SM_CXFRAME); rect.top = GetSystemMetrics(SM_CYFRAME); rect.right = titleRect.right - titleRect.left - GetSystemMetrics(SM_CXFRAME); rect.bottom = rect.top + GetSystemMetrics(SM_CYSIZE); TRACE("left:%d, top:%d, right:%d, botton:%d\r\n", rect.left, rect.top, rect.right, rect.bottom); CDC pDC; //创建DC设备 pDC.CreateDC("DISPLAY", NULL, NULL,NULL); // CDC *pDC = GetWindowDC();//用这个无效 CBrush brush; //使用自定义/位图画刷,画背景图 CBitmap bitmap; // IDB_MAIN_CAPTION即为上述主界面标题栏背景位图的资源ID // bitmap.LoadBitmap( IDB_MAIN_CAPTION ); // CBitmap* bk = &bitmap; // brush.CreatePatternBrush(bk); brush.CreateSolidBrush(RGB(0,0,0)); pDC.SetBkMode(TRANSPARENT);//标题栏背景模式设为透明 //用自定义的画刷填充背景正中位置显示系统标题 pDC.FillRect(&titleRect,&brush); // ReleaseDC(pDC); 不会双缓冲,我在GDI绘图的知识很薄弱... http://download.csdn.net/tag/%E6%A0%87%E9%A2%98%E6%A0%8F/orderbydownloads看看这里有吗 http://download.csdn.net/download/wxhdreaming/192649这个例子貌似可以,我下了,代码还没细看 MFC中如何在文本编辑框中画图 绘制波形耗时惊人 一个类定义的问题 关于COM,关于ArcGIS二次开发问题 CTreeCtrl实现目录树,如何编码实现添加“我的文档”“我的电脑”“网上邻居”“回收站”这4个节点 数组内存释放 这样可以实现吗? DLL和LIB的关系?问题解决立即给分!在线等 关于UPDATEDATA()的问题!急的挠头啊;会VC的都来看看; 请教:一个关于“银行储蓄系统管理”的修改用户密码的问题 如何对设备管理器中的设备进行控制 microsoft ado data control 6.0 oledb不支持此接口
调试的时候,发现拖动的时候并没有触发...重载WM_MOVE后,拖动的时候,整个对话框都黑了(PS:我把标题栏改为黑色了)
LRESULT CWarningDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
if (message==WM_MOVE||message==WM_PAINT||message==WM_NCPAINT||message==WM_NCACTIVATE ||message == WM_NOTIFY)
{ DrawTitleBar(); }
return CDialog::DefWindowProc(message, wParam, lParam);
}
我这样改了,但是拖动的时候,整个对话框客户区和非客户区全部便黑了...
代码怎么写的?
CRect titleRect, rect; //计算标题栏的坐标区域
this->GetWindowRect(&titleRect);
rect.left = GetSystemMetrics(SM_CXFRAME);
rect.top = GetSystemMetrics(SM_CYFRAME);
rect.right = titleRect.right - titleRect.left - GetSystemMetrics(SM_CXFRAME);
rect.bottom = rect.top + GetSystemMetrics(SM_CYSIZE);
TRACE("left:%d, top:%d, right:%d, botton:%d\r\n", rect.left, rect.top, rect.right, rect.bottom);
CDC pDC; //创建DC设备
pDC.CreateDC("DISPLAY", NULL, NULL,NULL);
// CDC *pDC = GetWindowDC();//用这个无效
CBrush brush; //使用自定义/位图画刷,画背景图
CBitmap bitmap;
// IDB_MAIN_CAPTION即为上述主界面标题栏背景位图的资源ID
// bitmap.LoadBitmap( IDB_MAIN_CAPTION );
// CBitmap* bk = &bitmap;
// brush.CreatePatternBrush(bk);
brush.CreateSolidBrush(RGB(0,0,0));
pDC.SetBkMode(TRANSPARENT);//标题栏背景模式设为透明
//用自定义的画刷填充背景正中位置显示系统标题
pDC.FillRect(&titleRect,&brush);
// ReleaseDC(pDC);
不会双缓冲,我在GDI绘图的知识很薄弱...
看看这里有吗