扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:张 钟 来源:ahcit 2007年10月19日
关键字:
class CMinButtonDlg : public CDialog { ………… public: CRect m_rtButtMin; //记录最小化按钮位置 void DrawButton(); //绘制最小化按钮 BOOL m_BMPPressed;//最小化按钮状态标志 CRect m_ButtMinTips;//记录最小化按钮区域 protected: CToolTips m_ToolTip;//定义工具提示条控件变量 void GetMinButRect();//获取最小化按钮所在区域 //消息处理函数 afx_msg void OnNcLButtonDown(UINT nHitTest, CPoint point); afx_msg void OnNcPaint(); afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized); afx_msg void OnNcMouseMove(UINT nHitTest, CPoint point); ………… }; |
//对应消息WM_NCPAINT的消息处理函数 void CMinButtonDlg::OnNcPaint() { CDialog::OnNcPaint(); DrawButton(); //绘制最小化按钮 } //对应消息WM_ACTIVATE的消息处理函数 void CMinButtonDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) { CDialog::OnActivate(nState, pWndOther, bMinimized); DrawButton(); //绘制最小化按钮 } //对应消息WM_NCMOUSEMOVE的消息处理函数 void CMinButtonDlg::OnNcMouseMove(UINT nHitTest, CPoint point) { DrawButton(); //绘制最小化按钮 CDialog::OnNcMouseMove(nHitTest, point); } |
void CMinButtonDlg::DrawButton() { CDC* pDC = GetWindowDC(); CDC* pMemDC=new CDC; CBitmap *pBitmap1=new CBitmap; CBitmap *pBitmap2=new CBitmap; CBitmap *pOldBitmap; CRect rtWnd, rtButtons, rtTitle; //创建一个内存设备环境 pMemDC->CreateCompatibleDC(pDC); if(!pDC) return; GetWindowRect(&rtWnd); //取得标题栏的矩形 rtTitle.left = GetSystemMetrics(SM_CXFRAME); rtTitle.top = GetSystemMetrics(SM_CYFRAME); rtTitle.right = rtWnd.right - rtWnd.left - GetSystemMetrics(SM_CXFRAME); rtTitle.bottom = rtTitle.top + GetSystemMetrics(SM_CYSIZE); //计算最小化按钮的位置,位图大小为15X15 rtButtons.top=rtTitle.top+1; rtButtons.bottom=rtButtons.top+15; rtButtons.right = rtTitle.right-20; rtButtons.left = rtButtons.right-15; m_rtButtMin = rtButtons; pBitmap1->LoadBitmap(IDB_BITMAP1); //调入正常状态按钮的位图 pBitmap2->LoadBitmap(IDB_BITMAP2); //调入按钮按下状态的位图 m_rtButtMin.OffsetRect(rtWnd.TopLeft());//记录最小化按钮的位置 //将按钮位图调入内存设备环境中,m_BMPPressed为TRUE //调入正常状态按钮的位图 pOldBitmap=pMemDC->SelectObject(m_BMPPressed ? pBitmap1: pBitmap2); //将按钮位图复制到实际的内存设备环境中 pDC->BitBlt(rtButtons.left, rtButtons.top, rtButtons.Width(), rtButtons.Height(), pMemDC, 0, 0, SRCCOPY); pMemDC->SelectObject(pOldBitmap);//恢复原来的内存设备环境 //释放资源 ReleaseDC(pMemDC); ReleaseDC(pDC); delete pMemDC; delete pBitmap1; delete pBitmap2; } |
void CMinButtonDlg::OnNcLButtonDown(UINT nHitTest, CPoint point) { CDialog::OnNcLButtonDown(nHitTest, point); //检测是否在最小化按钮区域内按下按钮 if (m_rtButtMin.PtInRect(point)) { m_BMPPressed=FALSE;//绘制按钮按下时的状态 DrawButton(); //绘制最小化按钮 m_BMPPressed=TRUE;//绘制按钮的正常状态 SendMessage(WM_SYSCOMMAND, SC_MINIMIZE, MAKELPARAM(point.x, point.y));//发送最小化消息 } } |
BOOL CToolTips::AddToolTip( UINT nID, LPRECT lpRect, LPCTSTR lpszText ) { TOOLINFO Tips; memset(&Tips, 0, sizeof(TOOLINFO)); Tips.cbSize = sizeof(TOOLINFO); Tips.hwnd = GetOwner()->GetSafeHwnd(); Tips.uFlags = TTF_SUBCLASS; Tips.uId = nID; memcpy(&Tips.rect, lpRect, sizeof(RECT)); Tips.lpszText = (LPSTR)lpszText; return (BOOL)SendMessage(TTM_ADDTOOL, 0, (LPARAM)&Tips); } |
m_ToolTip.Create(this,TTS_ALWAYSTIP);//创建工具提示控件,TTS_ALWAYSTIP表示, //不论控件所属窗体是否活动,提示条始终有效 GetMinButRect(); ScreenToClient(&m_ButtMinTips);//屏幕坐标转换为窗体坐标 m_ToolTip.AddToolTip(1,&m_ButtMinTips,"最小化"); |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者