完成对话框收缩的功能

要求:

在窗口添加个按钮,修改其名称为“收缩”,当点击“收缩”按钮时,将对话框切除一部分,并将按钮文字改为“扩展”;当再次点击“扩展”时,还原对话框


过程:

1、在窗口添加个按钮,修改其名称为“收缩”,

2、为按钮增加点击事件;

3、在事件中添加CString 变量,用来判断当前按钮上的文字内容;

4、在对话框上添加分隔符,用于表示分隔线;

5、获得对话框的宽、高以便截取;要获得坐标

获得窗口的矩形区域:CWnd::GetWindowRect();

6、了解CRect类。

CRect类中,有两个函数可以判断矩形区域是否为空,

IsRectEmpty();检测矩形宽、高是否都为0.

IsRectNull();检测左上角坐标,和右下角坐标是否为0;


Z次序:窗口中的Z次序表明了重叠窗口堆中窗口的位置。这个窗口堆是按一个假想的轴定位的,Windows 系统管理三个独立的Z次序——一个用于顶层窗口,一个用于兄弟窗口,一个用于最顶层窗口。应用程序通过设置WS_EX_TOPMOST风络创建最顶层窗口。可通过函数BringWindowToTop把一个窗口放置到Z次序的顶部,函数SetWindowPos和DeferWindowPos用来重排Z次序。

兄弟窗口:共享同一个父窗口的多个子窗口叫兄弟窗口;

活动窗口:应用程序的顶层窗口,也是当前使用的窗口。应用程序通过调用SetActiveWindow来激活一个顶层窗口。

前台窗口:当前正在创建的窗口,称之为前台窗口,应用 程序用函数SetForegroundWindow设置前台窗口。

后台窗口:其它窗口,称为后台窗口。

CWnd::SetWindowPos():设置窗口位置.如设置为顶层窗口.


示例:

static CRect rectlarge;
static CRect rectsmall;

if(rectlarge.IsRectNull())//因为定义了static值为0,所以可以进入?
{
CRect rectseparator;
GetWindowRect(&rectlarge); \\在这里rectlarge不是0吗?它的地址是多少?
GetDlgItem(IDC_SEPARATOR)->GetWindowRect(&rectseparator);

rectsmall.left = rectlarge.left;
rectsmall.top = rectlarge.top ;
rectsmall.right = rectlarge.right;
rectsmall.bottom = rectseparator.bottom;
}

if(str1 == "收缩<<")
{
SetWindowPos(NULL,0,0,rectsmall.Width(),rectsmall.Height(),SWP_NOMOVE | SWP_NOZORDER);
}
else
{
SetWindowPos(NULL,0,0,rectlarge.Width(),rectlarge.Height(),SWP_NOMOVE | SWP_NOZORDER);
}


问题:

1、了解前台窗口和活动窗口的区别,


猜你喜欢

转载自blog.csdn.net/dyz_123456/article/details/70598640