制做像QQ那种自动停靠.自动收缩的窗口.

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

1.首先处理自动停靠.

1).建立一个对话框类CDlg.

2).

///dlg.h

class CDlg

{

private:

bool m_isAutoHide; //窗口是否可以自动隐藏

bool m_isWinHide; // 窗口是否隐藏

...........

}

///dlg.cpp

.....

void CDlg::OnMove(int x, int y)

{

CDialog::OnMove(x, y);

///窗口从显示到隐藏时,不做其它操作

if(m_isWinHide)

{

return;

}

CRect tRect;

GetWindowRect(tRect);

if(tRect.top<10)

{///如果窗口移动后的位置和到屏幕上方的距离小于10

///就使窗口停靠到屏幕上方.

tRect.bottom-= tRect.top;

tRect.top= 0;

MoveWindow(tRect);

///窗口停靠后就可以自动隐藏

m_isAutoHide= true;

}

else

{

///如窗口没有停靠就不可以自动隐藏

m_isAutoHide= false;

}

}

void CDlg::OnMoving(UINT fwSide, LPRECT pRect)

{

if((pRect->top < 10)

&& (!m_isAutoHide) )

{///如果窗口移动到的位置和到屏幕上方的距离小于10

///就使窗口停靠到屏幕上方.

pRect->bottom-= pRect->top;

pRect->top= 0;

m_isAutoHide= true;

}

CDialog::OnMoving(fwSide, pRect);

}

2.处理自动收缩

//dlg.h

class CDlg

{

.....

LRESULT OnMouseLeave( HWND hwnd, UINT msg,

WPARAM wParam,LPARAM lParam );

}

//dlg.cpp

BEGIN_MESSAGE_MAP(CDlg, CDialog)

ON_MESSAGE(WM_MOUSELEAVE,OnMouseLeave)

END_MESSAGE_MAP()

.......

LRESULT CDlg::OnMouseLeave(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )

{

if(m_isAutoHide)

{

CPoint tPoint;

GetCursorPos(&tPoint);

CRect tRect;

GetWindowRect(&tRect);

if(!(tRect.PtInRect(tPoint)))

{

m_isWinHide=true;

tRect.top= tRect.top - tRect.bottom +5;

tRect.bottom= 5;

MoveWindow(tRect);

::SetWindowPos(

::GetDesktopWindow()

,HWND_TOPMOST,tRect.left,tRect.top

,tRect.Width(),tRect.Height ()

,SWP_SHOWWINDOW);

}

}

return TRUE;

}

void CDlg::OnMouseMove(UINT nFlags, CPoint point)

{

if(m_isWinHide)

{

CRect tRect;

GetWindowRect(&tRect);

tRect.bottom+= (tRect.bottom-tRect.top-5);

tRect.top=0;

MoveWindow(tRect);

m_isWinHide= false;

}

TRACKMOUSEEVENT EventTrack;

EventTrack.cbSize= sizeof(TRACKMOUSEEVENT);

EventTrack.dwFlags= TME_LEAVE;

EventTrack.hwndTrack= this->m_hWnd;

_TrackMouseEvent(&EventTrack);

CDialog::OnMouseMove(nFlags, point);

}

<完成>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航