首页 >> 民生评论

设计超强仿自动伸缩窗口覆盖

民生评论  2021-08-24 18:33 字号: 大 中 小

代码六

void CHideWndDlg::DoShow()

{

if(m_hideMode == HM_NONE)

return;

CRect tRect;

GetWindowRect(tRect);

INT height = ight();

INT width = dth();

INT steps = 0;

switch(m_hideMode)

{

case HM_TOP:

steps = height/HS_STEPS;

p += steps;

if(p = -m_edgeHeight)

{ //你可以把下面一句替换上面的 ...+=|-=steps 达到取消抽屉效果

//更好的办法是添加个BOOL值来控制,其他case同样.

p = -m_edgeHeight;

m_hsFinished = TRUE; //完成显示过程

}

ttom = p + height;

break;

case HM_BOTTOM:

steps = height/HS_STEPS;

p -= steps;

if(p = (GetSystemMetrics(SM_CYSCREEN) - height))

{

p = GetSystemMetrics(SM_CYSCREEN) - height;

m_hsFinished = TRUE;

}

ttom = p + height;

break;

case HM_LEFT:

steps = width/HS_STEPS;

ght += steps;

if(ght = width)

{

ght = width;

m_hsFinished = TRUE;

}

ft = ght - width;

p = -m_edgeHeight;

ttom = GetSystemMetrics(SM_CYSCREEN) - m_taskBarHeight;

break;

case HM_RIGHT:

steps = width/HS_STEPS;

ft -= steps;

if(ft = (GetSystemMetrics(SM_CXSCREEN) - width))

{

ft = GetSystemMetrics(SM_CXSCREEN) - width;

m_hsFinished = TRUE;

另外 }

ght = ft + width;

p = -m_edgeHeight;

ttom = GetSystemMetrics(SM_CYSCREEN) - m_taskBarHeight;

break;

default:

break;

}

SetWindowPos(wndTopMost,tRect);

}

BOOL CHideWndDlg::SetWindowPos(const CWnd* pWndInsertAfter,

LPCRECT pCRect, UINT nFlags)

{

return CDialog::SetWindowPos(pWndInsertAfter,pCRect-left, pCRect-top,

pCRect-right - pCRect-left, pCRect-bottom - pCRect-top, nFlags);

}

到此,程序终于完成了。在我的源代码中还有对WM_SIZING的处理和定义了与之相关的宏,这些主要是控制窗口在调整大小时不能超过最小的宽度和高度,与的自动伸缩无关,所以不在这里提及了。

三、结束语

虽然还不能算是完美的模仿,但效果已经非常非常的接近了。也许有人会奇怪为什么要用Tool Window风格,这是因为,这样在任务栏中不会显示窗口。从的标题栏高度也可以判断出他也是这种风格,但这样一来就不能拥有最小化、最大化按键了。实际上的最大化、最小化和关闭按键都是用DC画上去的。如何在Caption上增加按键,外国一些开源站有源代码,我下载并看了一下,发现里面有个知识点很有趣,那就是更改消息路由,有兴趣的可以去下载来学习一下。

的成功很大部分在于他的界面比较人性化(用了MSN后深有感受),而这些界面实现起来原理也许很简单,难的是观察东西心要细、设计东西心要密、开发东西心要异。

查看本文来源

上海哪医院治疗妇科好
上海子宫内膜炎治疗费用多少钱
苏州白癜风治疗医院
推荐资讯