OnNcPaint,有人用过吗??? MFC的OnNcPaint后,怎么自绘边框啊。我想用图形填充titlebar,谁能给个例子!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 为什么我用对话框,重载OnNcPaint,里面什么也不写第一次不会绘制边框,可以第二次就绘制了?到底什么问题呢? to SoLike(思危) 怎么样用自己的图形画一个标题栏非常感谢!给出思想 void myDrawCaption(CWnd* pWnd, UINT nIDBmp){ CDC* pWinDC = pWnd->GetWindowDC(); CRect rtWnd, rcCap; pWnd->GetWindowRect(&rtWnd); CPoint point; point.x = rtWnd.Width(); int nMenu = pWnd->GetMenu()->m_hMenu?20:0;// 20 为菜单的高度 point.y = GetSystemMetrics(SM_CYSIZE) + GetSystemMetrics(SM_CYFRAME) + 1 + 30 + nMenu; rcCap.SetRect(0, 0, point.x, point.y); CDC memDC; memDC.CreateCompatibleDC(pWinDC); CBitmap bmp; bmp.LoadBitmap(nIDBmp); CBitmap* pBmp = (CBitmap*)memDC.SelectObject(&bmp); BITMAP bmpInfo; bmp.GetBitmap(&bmpInfo); pWinDC->StretchBlt(rcCap.left, rcCap.top, rcCap.Width(), rcCap.Height(), &memDC, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, SRCCOPY); memDC.SelectObject(pBmp); pWnd->ReleaseDC(pWinDC);}void CMainFrame::OnNcPaint(){ // TODO: 在此处添加消息处理程序代码 // 不为绘图消息调用 CFrameWnd::OnNcPaint() myDrawCaption(this, IDB_BITMAP1);} 1、没办法,关闭按钮也要自己绘,你可以也找个位图贴一下,如果不想自己贴,可以调用 DrawFrameControl 来绘制。2、呵呵,你没说边框也要自绘呀。以前有个朋友和交流过skin,等下帮你找找代码,俺还在做饭呢。 翻半天也没找到,估计是换了几次工作,拷贝东西时搞丢了,真是可惜。实际边框也好处理,用CDC* pWinDC = pWnd->GetWindowDC();CRect rtWnd, rcCap;pWnd->GetWindowRect(&rtWnd); pWinDC->FillSolidRect(rcWnd, RGB(255,0,0));就可以连边框和标题一起绘。当然作为一个产品不能这么做,要进行优化,比如把客户区从中分离出去,这样可以减少绘制的工作量。WM_ERASEBKGND 消息直接返回TRUE,防止重复绘制。等等,这个需要你自己研究一下。有问题可以发消息给我,:) bind()错误,10049怎样解决 comboox的内容变更问题 请问:已知网络上某节点Mac地址,如何获得其IP地址 请教一下关于两张图片比较的问题 特殊数据库要求:一旦断电所有数据要彻底消失!!![求助] 使用MCIWnd类播放avi文件时,如何显示出打开的avi文件的时间(精确到毫秒)??? 小白问:如何设置对话框中控件的Z序? static AFX_DATA const AFX_MSGMAP messageMap,是什么意思? 关于正个工程中数据共用的超简单问题 在VC下实现 GB 码到 BIG5 码的转换的问题 请问一下所谓掌握tcp/ip到底要学到什么程度啊? 曲线的打印问题!
第一次不会绘制边框,可以第二次就绘制了?
到底什么问题呢?
非常感谢!给出思想
{
CDC* pWinDC = pWnd->GetWindowDC(); CRect rtWnd, rcCap;
pWnd->GetWindowRect(&rtWnd);
CPoint point;
point.x = rtWnd.Width();
int nMenu = pWnd->GetMenu()->m_hMenu?20:0;// 20 为菜单的高度
point.y = GetSystemMetrics(SM_CYSIZE) + GetSystemMetrics(SM_CYFRAME) + 1 + 30 + nMenu;
rcCap.SetRect(0, 0, point.x, point.y); CDC memDC;
memDC.CreateCompatibleDC(pWinDC);
CBitmap bmp;
bmp.LoadBitmap(nIDBmp);
CBitmap* pBmp = (CBitmap*)memDC.SelectObject(&bmp);
BITMAP bmpInfo;
bmp.GetBitmap(&bmpInfo); pWinDC->StretchBlt(rcCap.left, rcCap.top, rcCap.Width(), rcCap.Height(), &memDC, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, SRCCOPY); memDC.SelectObject(pBmp); pWnd->ReleaseDC(pWinDC);
}void CMainFrame::OnNcPaint()
{
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CFrameWnd::OnNcPaint()
myDrawCaption(this, IDB_BITMAP1);}
CDC* pWinDC = pWnd->GetWindowDC();CRect rtWnd, rcCap;
pWnd->GetWindowRect(&rtWnd);
pWinDC->FillSolidRect(rcWnd, RGB(255,0,0));就可以连边框和标题一起绘。当然作为一个产品不能这么做,要进行优化,比如把客户区从中分离出去,这样可以减少绘制的工作量。WM_ERASEBKGND 消息直接返回TRUE,防止重复绘制。等等,这个需要你自己研究一下。有问题可以发消息给我,:)