test:另一种不闪烁的实现方法:
1. 先建立一个HRGN或CRgn,这是窗口实际显示的区域。这个区域完全放在ClientRect内。
2. 在OnInitDialog()中SetWindowRgn()
3. 在OnPaint()中画出边框、标题、最大最小化按钮等。
4. 在OnMouseMove()判断鼠标光标是否在最大最小化按钮上,做出相应动画效果。在OnMouseLButtonDown()中判断是否点击了按钮,并做出动画效果。
5. 将OnMouseMove()和OnMouseLButtonDown()结合起来,
以拖到窗口:
void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
CRect rect;
IsDraging=TRUE;
GetWindowRect(&rect);
LastCursorPosition.x=point.x+rect.left;
LastCursorPosition.y=point.y+rect.top;
CDialog::OnLButtonDown(nFlags, point);
}
void CMyDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
IsDraging=FALSE;
CDialog::OnLButtonUp(nFlags, point);
}
void CMyDlg::OnMouseMove(UINT nFlags, CPoint point)
{
if((nFlags&MK_LBUTTON)!=0)
{
CRect rect;
CPoint np;
GetWindowRect(&rect);
np.x=rect.left+point.x;
np.y=rect.top+point.y;
SetWindowPos(&wndTop,
rect.left+(np.x-LastCursorPosition.x),
rect.top+(np.y-LastCursorPosition.y),
0,0,SWP_NOSIZE);
LastCursorPosition=np;
}
CDialog::OnMouseMove(nFlags, point);
}
(发表于2002-8-15 15:00:00)
author22:这个东西也拿出来呀!昏
(发表于2004-4-5 15:14:00)
..........................................................................
--------------------next---------------------