3 Ö÷ÒªµÄ³ÌÐò´úÂë
¢Å ÔÚ¶Ô»°¿òÀàÖж¨ÒåÏàÓ¦µÄ±äÁ¿ºÍº¯ÊýÉùÃ÷
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;
}
¢È ¶ÔÓ¦Êó±ê×ó¼üµÄWM_NCLBUTTONDOWNÏûÏ¢´¦Àíº¯Êý
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);
}
¢Ê ÔÚ¶Ô»°¿ò³õʼ»¯º¯ÊýOnInitDialog()ÖÐÌíÏÂÁдúÂ룺
m_ToolTip.Create(this,TTS_ALWAYSTIP);//´´½¨¹¤¾ßÌáʾ¿Ø¼þ£¬TTS_ALWAYSTIP±íʾ£¬//²»ÂۿؼþËùÊô´°ÌåÊÇ·ñ»î¶¯£¬ÌáʾÌõʼÖÕÓÐЧ
GetMinButRect();
ScreenToClient(&m_ButtMinTips);//ÆÁÄ»×ø±êת»»Îª´°Ìå×ø±ê
m_ToolTip.AddToolTip(1,&m_ButtMinTips,"×îС»¯");
4 ½áÊøÓï
ʵÀý³ÌÐòµÄ²âÊÔ»·¾³ÎªWindows 98¡¢P¢ò350£¬Ð§¹ûÁ¼ºÃ¡£