1. 鼠标在桌面显示什么样的图标?桌面的背景色是什么?
窗口类:WNDCLASS
2. 窗口大小改变(重画)
int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // command line
int nCmdShow // show state
)
{
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WinSunProc;
wndcls.lpszClassName="Weixin2003";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW;//(x|y坐标位置发生重画)
RegisterClass(&wndcls);
HWND hwnd;
hwnd=CreateWindow("Weixin2003","北京维新科学技术培训中心",WS_OVERLAPPEDWINDOW,
0,0,600,400,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
3. 关闭窗口弹出对话框
LRESULT CALLBACK WinSunProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
switch(uMsg)
{
case WM_CHAR:
char szChar[20];
sprintf(szChar,"char is %d",wParam);
MessageBox(hwnd,szChar,"weixin",0);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"mouse clicked","weixin",0);
HDC hdc;
hdc=GetDC(hwnd);
TextOut(hdc,0,50,"计算机编程语言培训",strlen("计算机编程语言培训"));
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps;
hDC=BeginPaint(hwnd,&ps);
TextOut(hDC,0,0,"维新培训",strlen("维新培训"));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,"是否真的结束?","weixin",MB_YESNO))/* 关闭窗口弹出对话框"是否真的结束?"*/
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
4. 在桌面具体位置显示一句话
void CTextView::OnDraw(CDC* pDC)
{
CTextDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CString str;
str="维新科学技术培训中心";
pDC->TextOut(50,50,str);//在50,50处显示一句话(lesson5B。html)
/*CSize sz=pDC->GetTextExtent(str);
str.LoadString(IDS_WEIXIN);
pDC->TextOut(0,200,str);
pDC->BeginPath();
pDC->Rectangle(50,50,50+sz.cx,50+sz.cy);
pDC->EndPath();
pDC->SelectClipPath(RGN_DIFF);
for(int i=0;i<300;i+=10)
{
pDC->MoveTo(0,i);
pDC->LineTo(300,i);
pDC->MoveTo(i,0);
pDC->LineTo(i,300);
}*/
}
5. 修改窗口的外观和大小(lesson 9A )(msdn 中查询 window styles)
(窗口创建之前
)在CMainFrame里面的BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
里进行修改窗口的外观和大小
SetWindowLong()函数可以改变窗口的属性
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.cx=300;
cs.cy=200;//这两句设置窗口的大小
cs.style=WS_OVERLAPPEDWINDOW;
cs.lpszName="http://www.sunxin.org";//修改窗口的标题
return TRUE;
}
6. 在窗口创建之后修改窗口的外观(lesson 9A -2)
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{。。。。。。。。。。。。。。。。。。。。。。
//在窗口创建之后修改窗口的外观
//SetWindowLong(m_hWnd,GWL_STYLE,WS_OVERLAPPEDWINDOW);//修改窗口名
//SetWindowLong(m_hWnd,GWL_STYLE,GetWindowLong(m_hWnd,GWL_STYLE) & ~WS_MAXIMIZEBOX);//修改窗口的 最大化建和双击窗口放大 的功能
/* SetClassLong(m_hWnd,GCL_HICON,(LONG)LoadIcon(NULL,IDI_ERROR));//修改窗口的图标光标,但是需要在PreCreateWindow函数里定义自己的窗口类
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
………………………..
/****************************
WNDCLASS wndcls;变量
wndcls.cbClsExtra=0;类的额外内存不需要
wndcls.cbWndExtra=0;窗口的额外内存不需要
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);获取黑色的背景画刷,在框架类里不显示,只能在视图类里创建,可在BOOL CStyleView::PreCreateWindow函数里写入cs.lpszClass="sunxin.org";
wndcls.hCursor=LoadCursor(NULL,IDC_HELP);系统标准的光标NULL及ID号,在框架类里不显示,只能在视图类里创建
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);标准的图标NULL及名字error(图标属于框架窗口,视图窗口凌驾与框架窗口之上,只能在框架类里修改)
wndcls.hInstance=AfxGetInstanceHandle();获取当前应用程序的句柄
(凡是前面带afx的函数都是系统框架的函数所有的类中都可以以直接的去调用)
wndcls.lpfnWndProc=::DefWindowProc;窗口的过程(缺省的,不修改),系统有两个DefWindowProc函数,所以要在前面写上::表示调用的是全局的API函数
wndcls.lpszClassName="sunxin.org";类的名字
wndcls.lpszMenuName=NULL;菜单的名字设为NULL并不影响窗口的创建
wndcls.style=CS_HREDRAW | CS_VREDRAW;窗口类的类型 水平重画|垂直重画
RegisterClass(&wndcls);创建完后把窗口类注册一下
框架窗口类的创建要按新创建的窗口类创建
cs.lpszClass="sunxin.org";可以修改cs的类名
*****************/
//cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,0,0,
LoadIcon(NULL,IDI_WARNING));修改设定类的类型和光标图标背景色的类型。
不用再重新创建一个窗口类了,等同与上面的粉红色星号之间的所有代码
同时在view类的PreCreteWindow函数里写入
cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,
LoadCursor(NULL,IDC_CROSS),(HBRUSH)GetStockObject(BLACK_BRUSH),0);
//cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW);箭头光标,波浪状的图标,透明的背景色
同时在view类的PreCreteWindow函数里写入
cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW);
…………………………..
}
*/
。。。。。。。。。。。。。。。。。。。。
}
7. VC教学视频/Lesson9/Video/Lesson 9C .html
8.lesson10
改变对话框和控件的背景色,改变控件的文本颜色,对按钮控件的特殊处理。在窗口中显示一幅位图。
(1)、改变对话框和控件的背景色 要用到函数CWnd::OnCtlColor
对CSettingDlg 右击添加函数WM_CTLCOLOR WM_PAINT 生成函数
HBRUSH CSettingDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{。。。。。。。。。。。。。。。。。。。。。。。}
要改变对话框和控件的背景色,需让函数返回我们自己定义的画刷,对CSettingDlg右击添加一个变量m_brush 类型是CBrush 私有的
在构造方法中对画刷初始化:
CSettingDlg::CSettingDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSettingDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSettingDlg)
m_nLineWidth = 0;
m_nLineStyle = -1;
//}}AFX_DATA_INIT
m_clr=RGB(255,0,0);
m_brush.CreateSolidBrush(RGB(0,0,255)); //1.蓝色的画刷(CreateSolidBrush功能是创建一个有颜色的画刷)
然后把HBRUSH CSettingDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
里的返回值return hbr;改为return m_brush就完成了控件背景全是蓝色的
}
(2)、对具体控件背景色的改变要用到函数GetDlgCtrlld(通常是获得一个子窗口的ID值)
HBRUSH CSettingDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if(pWnd->GetDlgCtrlID()==IDC_LINE_STYLE)//判断ID等于多少时修改背景色(如修改主框的背景色,它的ID要修改一下为IDC_LINE_STYLE)(Ctrl+Tab可以实现控件界面与代码界面的切换)
{
pDC->SetTextColor(RGB(255,0,0));//改变主框的文本颜色
pDC->SetBkMode(TRANSPARENT);//将文字的背景色设为透明的
return m_brush;//返回指定的画刷就可以了
}
if(pWnd->GetDlgCtrlID()==IDC_LINE_WIDTH)//文本框的背景色改变
{
pDC->SetTextColor(RGB(255,0,0));
//pDC->SetBkMode(TRANSPARENT);
pDC->SetBkColor(RGB(0,0,255)); //改变单行控件的背景颜色
return m_brush;
}
。。。。。。。。。。。。。。。。。。。。。。。。
// TODO: Return a different brush if the default is not desired
return hbr;
//return m_brush;
}
(3)、改变字体(此例中文本框中的字体)的格式
先右击CSettingDlg添加一个私有的CFont类型的变量m_font这是一个字体。
在构造函数中对这个字体初始化:
CSettingDlg::CSettingDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSettingDlg::IDD, pParent)
{
。。。。。。。。。。。。。。。。。。。。。。。。。。
m_font.CreatePointFont(200,"华文行楷");//200为字体大小
}
判断一下当前绘制的是不是那个静态文本框:
HBRUSH CSettingDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
if(pWnd->GetDlgCtrlID()==IDC_TEXT)
{
pDC->SelectObject(&m_font);//将字体选择到设备描述体当中
}
/*if(pWnd->GetDlgCtrlID()==IDOK)
{
pDC->SetTextColor(RGB(255,0,0));//改变ok按钮的文字颜色
return m_brush;
}*/ // 但是这段代码没有作用 查看CButton的类成员
。。。。。。。。。。。。。。。。。。。。。
}
(4)、改变ok按钮的文字颜色
先创建一个Button类:
插入一个类,Class Type 是MFC Class ,新类的名字是CTestBtn,基类是CButton
若点确定后出现问题的话把本程序的文件夹了的 .clw删除掉,然后再在程序的view->ClassWizard里重新建立一个ClassWizard数据库文件。File name写 Graphic.clw
这样就可以看到我们的CTestBtn类了,然后在CTestBtn右击建立虚函数。选Drawltem。
然后
void CTestBtn::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your code to draw the specified item
UINT uStyle = DFCS_BUTTONPUSH;
// This code only works with buttons.
ASSERT(lpDrawItemStruct->CtlType == ODT_BUTTON);
// If drawing selected, add the pushed style to DrawFrameControl.
if (lpDrawItemStruct->itemState & ODS_SELECTED)
uStyle |= DFCS_PUSHED;
// Draw the button frame.
::DrawFrameControl(lpDrawItemStruct->hDC, &lpDrawItemStruct->rcItem,
DFC_BUTTON, uStyle);
// Get the button's text.
CString strText;
GetWindowText(strText);
// Draw the button text using the text color red.
COLORREF crOldColor = ::SetTextColor(lpDrawItemStruct->hDC, RGB(255,0,0));
::DrawText(lpDrawItemStruct->hDC, strText, strText.GetLength(),
&lpDrawItemStruct->rcItem, DT_SINGLELINE|DT_VCENTER|DT_CENTER);
::SetTextColor(lpDrawItemStruct->hDC, crOldColor);
}
接下来把控件的ok按钮关联一个成员变量(右击控件ClassWizard)变量类型是CTestBtn名字是m_btnTest 然后到CSettingDlg的头文件里最上面写#include”TestBtn.h”
然后到控件窗口点ok按钮的右键的属性,选中Styles里的Owner draw就可以了
(5)、改变按钮的背景颜色(有两个类可以实现,一个是老师写的,另一个是老师从网上下载的,下载的内容比较丰富):
把这两个类四个文件拷贝到当前程序所在文件夹,然后在程序里添加:工程,增加到工程,文件,增加进去四个文件
老师的类里面重写了Drawltem 更改相应控件的Styles里的Owner draw,然后添加一个成员变量,然后再把CSetting Dlg里的次变量的类名和包含的头文件改一下,分别改为SXBtn 和#include”SXBtn.h”
◆ 当鼠标放在控件上的时候控件的文字和控件的背景颜色改变,鼠标移走后控件恢复原样
Lesson 10G .html的03:50—12:00
9.lesson12
读写文件
Lesson15多线程与聊天室程序的创建
Lesson18ActiveX控件
Clock和Lesson19/Code/和Lesson20/Code/Hook实现打开文件窗口
Lesson19动态链接库
1. MFC生成的C++源文件中都有StdAfx.h,此文件包含了常用的AFX函数的声明,其中有afxwin.h,此文件包含了CRECT,CPoint,CWnd等许多类及其方法的声明。
在解决方案资源管理器中,Stdafx.h 位于头文件文件夹中,Stdafx.cpp 位于源文件文件夹中。
Stdafx.h | 标准系统包含文件和经常使用但不经常变化的项目特定包含文件的包含文件。 不应在 stdafx.h 中定义或取消定义任何 _AFX_NO_XXX 宏; |
Stdafx.cpp | 包含预处理器指令 #include "stdafx.h" 并添加预编译类型的包含文件。任何类型的预编译文件(包括头文件)都将编译目标限制在那些需要进行编译的文件内,从而支持更快的编译速度。首次生成项目后,由于预编译头文件的存在,您会发现后面的生成速度要快得多。 |
2. InvokeHelper 获取当用户双击此项时引发的处理程序。
1.ToolBar与图片关联
在CMAINFRAMONCreateBar()
ToolBar可以与图片关联
CImagelist类
CBitmap 类
LosdBitmap函数加载图片
Add()添加图片到m_Imagelist对象里
M_wndToolBar.GetToolBarCtrl().SetImageList(…….);
SetButtons();
SetButtonsInfo()设计控件的信息 参数分别是:位置 ID 样式
控制大小
GetItemRect()获取控件的大小
SetSize()设置大小,参数分别是: 按钮的大小 Image在Button的大小
响应是在 view.cpp里响应
ON—COMMAND()是响应代码的 里面的做参数的函数是无参的
2、 创建并显示一个窗口
窗口类WndClass
创建窗口 CreateWindow()
注册窗口 registerclass或registerclassEx
WndProc是操作系统调用的
显示窗口ShowWindow()
但是这样窗口只是闪一下,所以要有个消息循环
(从操作系统取得消息(getmessage)然后发给窗口)
While(Getmessage(&msg))
{
TranslateMessage();//快捷键消息
}
DispathMessage();//分发消息
加头文件
#include<windows.h>
WndProc(……….)
{
return DefWindowProc(…….);
}
窗口销毁消息
WM_DESTROY
具体代码如下:
#include <Windows.h>
//窗口类型说明
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
//-----------------以下初始化窗口类-------------------
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd )
{
HWND hWnd;
WNDCLASS wc;
char szApplicationName[]="Neusoft Media Player 2008";//窗口标题
//定义窗口类
/*wc.cbSize = sizeof(WNDCLASS);*/
wc.style = CS_HREDRAW | CS_VREDRAW;//定义窗口类型为窗口大小变化时窗口重画
wc.lpfnWndProc = WndProc;//定义窗口处理函数
wc.cbClsExtra = 0;//窗口类无扩展
wc.cbWndExtra = 0;//窗口实例无扩展
wc.hInstance = hInstance;//当前实例句柄
wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);//窗口的最小化图标为默认图标
//************************************************************************
// 要使用其中一个预先定义的图标,设置hInstance参数为NULL和lpIconName参数下列值之一。
//
// IDI_APPLICATION
// 默认的应用程序图标。
// IDI_ASTERISK
// 相同IDI_INFORMATION 。
// IDI_ERROR
// 手形图标。
// IDI_EXCLAMATION
// 相同IDI_WARNING 。
// IDI_HAND
// 相同IDI_ERROR 。
// IDI_INFORMATION
// 星号图标。
// IDI_QUESTION
// 问号图标。
// IDI_WARNING
// 惊叹号图标。
// IDI_WINLOGO
//***************************************************************************
wc.hCursor = LoadCursor(NULL, IDC_ARROW);//窗口采用箭头光标
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);//窗口背景(HBRUSH)GetStockObject(WHITE_BRUSH)为白色背景
wc.lpszMenuName = NULL;//窗口中无菜单
wc.lpszClassName = szApplicationName;//定义窗口类名称
/* wc.hIconSm = NULL;*/
//----------------注册窗口类------------------------
RegisterClass(&wc);
//----------------创建窗口类------------------------
hWnd = CreateWindow(szApplicationName,szApplicationName,
WS_OVERLAPPEDWINDOW, 10, 10, 600, 600, NULL, NULL, hInstance, NULL);
ShowWindow(hWnd, SW_SHOW);//显示窗口
UpdateWindow(hWnd);//绘制用户区
//-------------------消息循环---------------------------
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;//程序终止时将相应信息返回系统
}
//----------------------窗口函数--------------------------------
LRESULT CALLBACK WndProc(HWND hWnd, UINT uiMsg, WPARAM wPrm, LPARAM lPrm)
{
switch (uiMsg)
{
case WM_DESTROY:
PostQuitMessage(0);//向应用程序发出WM_QUIT消息
break;
case WM_LBUTTONDOWN:
MessageBox(hWnd, "hello", "f2", MB_OK|MB_ICONWARNING);
break;
//case WM_DESTROY:
// break;
default:
return DefWindowProc(hWnd, uiMsg, wPrm, lPrm);
}
return 0;
}
//结束
3.
null 与 "" 的区别 String str1 = null; str引用为空 也就是null没有分配空间,""分配了空间,因此str1还不是一个实例化的对象,而str2已经实例化。 注意因为null不是对象,""是对象。所以比较的时候必须是 if(str1==null){....}和if(str2.equals("")){} 对象用equals比较,null用等号比较。因此,如果str1=null;下面的写法错误: 正确的写法是 if(str1==null||str1.equals("")){ //先判断是不是对象,如果是,再判断是不是空字符串 |
4.NULL和null的区别是什么:
NULL代表空地址,null只是一个符号
5. 在对话框上显示指定大小视图,并移动到指定位置
本文使用的方法在VC++.net 2003上调试通过。
今天下午要做个东西,在对话框上显示一个滚动视图,并在视图中绘制一些图像。
查了一些资料后觉得下述方法是可行的。
第一步,使用MFC向导建立了一个单文档的工程。新建一个对话框CMydlg,在头文件中定义CFrameWnd * m_pFrame。新建一个滚动视图CMyview,这时视图类的virtual void OnInitialUpdate()函数是protected的,将其改为public,因为我们要在对话框中调用该函数。
第二步,在CMydlg::OnInitDialog()中加入下面的代码。
CCreateContext pContext;
CRect rectWndClient;
//得到对话框客户区大小
GetClientRect(&rectWndClient);
//下面是为了使视图框架比对话框小一些
rectWndClient.right-=45;
rectWndClient.top+=20;
rectWndClient.left+=45;
rectWndClient.bottom-=20;
m_pFrame= new CFrameWnd();
m_pFrame->Create(NULL,NULL,WS_VISIBLE|WS_CHILD,rectWndClient,this);
pContext.m_pCurrentDoc =NULL;//我们没有建立文档
pContext.m_pNewViewClass = RUNTIME_CLASS(CMyview);
CMyview *pView =(CMyview *) ((CFrameWnd*)m_pFrame)->CreateView&pContext);
ASSERT(pView);
pView->ShowWindow(SW_NORMAL);
//视图从框架左上角到右下角
rectWndClient.left-=45;//使得rectWndClient.left等于0
rectWndClient.top-=20;//使得rectWndClient.top等于0
rectWndClient.right-=45;
rectWndClient.bottom-=20;
pView->MoveWindow(rectWndClient);
pView->OnInitialUpdate();//不加这一句在鼠标点击视图时会报错的,原因请看资料2
好了,到这里就可以在对话框上看到你的视图了,你可以像平常一样在OnDraw里画图看看效果。
6、在菜单一个操作(ID_DIALOG)响应后弹出一个模态对话框
先插入一个新 对话框,修改属性,对对话框建立一个新类CTestDlg
菜单的那个消息建立在view上,
并在加入~View.cpp的最上面加入头文件#include” TestDlg.h”
在消息 void ~View::onDialog()
{
CTestDlg dlg;
dlg.DoModal();//对话框显示的时候对象的生命周期并没有结束
//非模态对话框用Create(对话框ID,父窗口的指针this)创建
//但是还需要用showWindow(SW_show);显示窗口
//但是将对象定义为局部变量是不可以的,应改为指针或者全局变量
/* CTestDlg *pDlg=new CTestDlg();//这个指针应该在View类里定义为全局的,并在析构函//数里用delete释放
pDlg->Create(IDD_DIALOG1,this);
pDlg->ShowWindow(SW_SHOW);*/
}
6. 对话框的伸缩扩展功能了lesson 7F
增加一个控件,改变属性,ID为IDC_BUTTON2 改 caption为 收缩《
双击增加响应函数
void CTestDlg::OnButton2()
{
// TODO: Add your control notification handler code here
CString str;
if(GetDlgItemText(IDC_BUTTON2,str),str=="收缩<<")
{
SetDlgItemText(IDC_BUTTON2,"扩展>>");
}
else
{
SetDlgItemText(IDC_BUTTON2,"收缩<<");
}//这段代码实现控件点击时名称相互改变
//在对话框上添加一个分隔符,表示要切割的部分(用图像控件来代替,拉成一条线)
//改变它的属性:ID:IDC_SEPARATOR 并取消Visible的复选项 Styles:选择Sunken使成为下陷的状态
static CRect rectLarge;//保存还原后的对话框的尺寸
static CRect rectSmall;// 保存切割后的对话框的尺寸
if(rectLarge.IsRectNull())//判断矩形区域是否为空
{
CRect rectSeparator;
GetWindowRect(&rectLarge);//获得窗口的矩形区域
GetDlgItem(IDC_SEPARATOR)->GetWindowRect(&rectSeparator);//获得图像控件的矩形区域
rectSmall.left=rectLarge.left;//左上角的横坐标=rectLarge.left
rectSmall.top=rectLarge.top;//没有改变
rectSmall.right=rectLarge.right; //没有改变
rectSmall.bottom=rectSeparator.bottom; //改变
}
if(str=="收缩<<")
{
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);
}
}