当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 让你的软件界面更漂亮(一)
| 让你的软件界面更漂亮(一) 下载源代码 CBitmap* pBitmap = new CBitmap; BITMAP BmpInfo; CBitmap* pOldBitmap; CDC* pDisplayMemDC=new CDC; pDisplayMemDC->CreateCompatibleDC(pDC); pBitmap->LoadBitmap(IDB_TITLE_LEFT); pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap); pBitmap->GetBitmap(&BmpInfo); // x,y为绘图位置 ,必要时此语句要有For(..;..;..)控制 pDC->BitBlt(x,y, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY); pDisplayMemDC->SelectObject(pOldBitmap); pBitmap->DeleteObject(); ReleaseDC(pDisplayMemDC);//记得执行以下的语句 delete pDisplayMemDC; delete pBitmap;2、坐标的概念:点、窗口坐标和屏幕坐标及转换,很重要!如不清楚请先复习相关知识。 下图是我写在一个界面,就是基于上述原理实现的: 下面介绍软件如何实现的: ①、重载对话框的消息函数: void OnNcLButtonDown(UINT nHitTest, CPoint point);//单击标题栏时是响应 void OnNcMouseMove(UINT nHitTest, CPoint point);//Mous 在标题移动时响应 LRESULT DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)②、添加关键成员函数为:BOOL DrawTitleBar(CDC *pDC) ③、添加完消息涵数后,在.cpp中实现它们的代码: void CTitleBarDlg::OnNcMouseMove(UINT nHitTest, CPoint point) { CDC* pDC = GetWindowDC(); CDC* pDisplayMemDC=new CDC; pDisplayMemDC->CreateCompatibleDC(pDC); CBitmap* pBitmap = new CBitmap; CBitmap* pOldBitmap; CRect rtWnd, rtButton; if (pDC) { CString StrTemp = ""; GetWindowRect(&rtWnd); //mouse坐标转化为本窗口坐标 重要 point.x = point.x - rtWnd.left; point.y = point.y - rtWnd.top; //判断mouse是否移到系统按钮上 if (m_rtButtExit.PtInRect(point)) { pBitmap->LoadBitmap(IDB_EXIT_FOCUS); StrTemp = _T("关闭"); } else { if(m_rtButtMin.PtInRect(point)) { pBitmap->LoadBitmap(IDB_MIN_FOCUS); StrTemp = _T("最小化窗口"); } else { if(m_rtButtMax.PtInRect(point)) { pBitmap->LoadBitmap(IDB_MAX_FOCUS); if(IsZoomed()) { StrTemp = _T("还原窗口"); } else { StrTemp = _T("最化大窗口"); } } else { pBitmap->LoadBitmap(IDB_NORMAL); } } } rtButton = m_rtButtMin; BITMAP BmpInfo; pBitmap->GetBitmap(&BmpInfo); pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap); pDC->BitBlt(rtButton.left-6, rtButton.top-2, BmpInfo.bmWidth, BmpInfo.bmHeight, pDisplayMemDC, 0, 0, SRCCOPY); pDisplayMemDC->SelectObject(pOldBitmap); pBitmap->DeleteObject(); CRect ShowTipRec; ShowTipRec = m_rtButtMin; if(!StrTemp.IsEmpty()) { // ScreenToClient(&ShowTipRec); // m_ToolTip.AddToolTip(IDD_TITLEBAR_DIALOG,&ShowTipRec,StrTemp); // m_ToolTip.SetDelayTime(200); } } ReleaseDC(pDisplayMemDC); ReleaseDC(pDC); delete pDisplayMemDC; delete pBitmap; CDialog::OnNcMouseMove(nHitTest, point);}//此为关键函数void CTitleBarDlg::DrawTitleBar(CDC *pDC){ if (m_hWnd) { CBrush Brush(RGB(0,100,255)); CBrush* pOldBrush = pDC->SelectObject(&B |