2023年MFC学习笔记.doc

上传人:知****量 文档编号:58295367 上传时间:2022-11-07 格式:DOC 页数:149 大小:281.54KB
返回 下载 相关 举报
2023年MFC学习笔记.doc_第1页
第1页 / 共149页
2023年MFC学习笔记.doc_第2页
第2页 / 共149页
点击查看更多>>
资源描述

《2023年MFC学习笔记.doc》由会员分享,可在线阅读,更多相关《2023年MFC学习笔记.doc(149页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第一课1.MFC生成的C+源文献中都有StdAfx.h,此文献包含了常用的AFX函数的声明,其中有afxwin.h,此文献包含了CRECT,CPoint,CWnd等许多类及其方法的声明。2.Project-Setting-Debug可以加入命令行参数。3.在SDK中要加入windows.h和stdio.h。由于LoadCursor,MessageBox等函数的声明在这个文献中。4.创建一个完整的窗口的四个环节SDK,1设计窗口类,2注册窗口类,3创建窗口,4显示窗口5.函数名可以代表函数代码的首地址,即可作为函数指针。6.要查看VC数据类型,可以在MSDN中输入“BOOL”然后选择“DATA

2、TYPE”。7.atof将字符串转化为float,atoi将字符串转化为int型。8.所有从CWnd类派生的类都有m_hWnd句柄。9.变量的生命周期:可以认为出了包含它的大括号,这个变量的生命周期结束。所以全局变量的声明位于所有大括号之外。但是用new声明的变量和用static声明的变量除外。10.SDK示范程序,见下面。11.sprintf格式化字符,其头文献为stdio.h,在MFC中格式化字符用CString.Format12.GetDC()与ReleaseDC()要成对使用,否则会内存泄漏。同样,BeginPaint()与EndPaint()。13.GetStockObject()得

3、到画笔、画刷、字体、调色板的句柄,使用时必须用类型转换。14.什么时候用NULL,什么时候用0.答,对指针赋值时用NULL,对变量赋值时用0.15.什么是野指针?答:将指针指向的变量的内存释放后,此指针即变成野指针!如何避免野指针?答:将此指针指向NULL即可。p=NULL;16.SDK代码流程:#include windows.h/包含头文献LoadCursor,TextOut等函数#include stdio.h/包含sprintf,printf等函数LRESULT CALLBACK MyProc(.);/声明回调函数int WINAPI WinMain()WNDCLASS wndcls;

4、/设计窗口类wndcls.hcursor=LoadCursor();/初始化.RegisterClass(&wndcls);/注册窗口类hwnd=CreateWindow(.);/创建窗口ShowWindow(.);/显示窗口UpdateWindow(.);MSG msg;/定义消息结构体while(GetMessage(.)/消息循环.return 0;LRESULT CALLBACK MyProc(.)/实现回调函数switch(uMsg)case WM_CHAR:break;.第2课1.定义结构体和类时别忘掉在最后加入;号!例如Class Pointint x;int y;2.#incl

5、ude 与#include xxx.h的区别:不查找运营时目录,查找运营时目录!3.类的定义中,假如未指明成员类型,则缺省为private.而结构体中则缺省为public.4.引用:引用经常用在函数的传参上。此外数值互换函数也经常用引用。例change(int &x,int &y)int temp;temp=x;x=y;y=x调用时即可以用 int a=3;int b=4;change(a,b);一般不用指针来作为参数进行数值互换。由于会引起歧义。5.通常将类的定义放.h文献,而将其实现放在cpp文献中,别忘掉了在cpp文献中#include xxx.h6.如何防止类的反复定义?用#innde

6、f Point_H_H#define Point_H_Hclass Point;#endif来防止7.源文献cpp文献单独编译成obj文献。最后由链接器将与将要使用到的C+标准库类链接成exe文献,头文献不参与编译。所以在cpp文献中别忘掉了加入#include xxx.h8.函数的覆盖,在子类中重写父类的函数,此时采用初期绑定的方法。假如加入了virtual,则将采用迟绑定的技术,在运营时根据对象的类型拟定调用哪一个函数。此迟绑定技术是MFC的类的继承的精髓。9.强制类型转换。假如CFish从CAnimal派生而来。则可以将鱼的对象转换为CAnimal的对象,而反之则不行。从现实中理解也是正

7、常的,鱼可以是动物,而动物却不是鱼。再如int可以强制转换成char型。而反之则犯错。第3课1.在main或WinMain之前,全局变量已经被分派内存并初始化了。2.在MFC中在WinMain之前有个theApp全局变量先被构造并被初始化,而由于子类构造函数执行前,其父类的构造函数先被执行,所以CTestApp的父类CWinAPP的构造函数先执行。产生了theApp对象后,在WinMain()中的指针*pThread和*pApp就有了内容。3.MFC大体流程:CTestApp theApp;/构造全局对象WinMain()AfxWinMain();/调用下面的函数AfxWinMain()pTh

8、read-Initinstance();/初始化工作和注册窗口类,窗口显示和更新pThread-Run();/消息循环而在BOOL CTestApp:InitInstance()中的代码 CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CTestDoc), RUNTIME_CLASS(CMainFrame), / main SDI frame window RUNTIME_CLASS(CTestView); AddDocTemplate(p

9、DocTemplate);完毕了将这三个类关联起来的工作。4.如何在单文档文献中显示一个CButton的对象?在CMainFrame:OnCreate()中定义一个CButton的对象btn;然后调用btn.Create(维新,WS_DISABLED |WS_CHILD | WS_VISIBLE | BS_AUTO3STATE, CRect(0,0,300,100),/*GetParent(),*/this,123);注意点: (1).此处btn不能是局部变量,否则它的生命周期太短,将不能显示。 (2).在create函数的第二个参数中加入WS_VISIBLE 参数才行。否则必须调用ShowW

10、indow也可以在view的OnCreate消息响应函数中加入 (3).CButton类的定义头文献在afxwin.h中,而stdafx.h包含了afxwin.h,所以可以直接使用。由于MFC中的每一个类中都有#include stdafx.h的声明。第4课1.在单文档中view挡在MainFrame的前面。此时假如编写针对MainFrame的mouseClick事件,将不会有反映。2.消息响应会在3处修改代码,1处是在头文献中,/AFX_MSG(CDrawView)afx_msg void OnLButtonDown(UINT nFlags, CPoint point);afx_msg vo

11、id OnLButtonUp(UINT nFlags, CPoint point);afx_msg void OnMouseMove(UINT nFlags, CPoint point);/AFX_MSGDECLARE_MESSAGE_MAP()另一处是cpp文献的begin MessageMap和End MessageMap之间,BEGIN_MESSAGE_MAP(CDrawView, CView)/AFX_MSG_MAP(CDrawView)ON_WM_LBUTTONDOWN()ON_WM_LBUTTONUP()ON_WM_MOUSEMOVE()/AFX_MSG_MAP/ Standard

12、 printing commandsON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPreview)END_MESSAGE_MAP()最后是要有函数实现的代码。void CDrawView:OnLButtonDown(UINT nFlags, CPoint point) / TOD Add your message handler code here a

13、nd/or call defaultm_ptOrigin=m_ptOld=point;m_bDraw=TRUE;CView:OnLButtonDown(nFlags, point);3.画线:定义一个成员变量保存mouseDown的点m_Point 1)API函数方法画线用HDC 2)用CDC类成员函数画线。此时别忘掉ReleaseDC 3)用CClientDC 4)用CWindowDC,用它甚至可以整个屏幕区域画线。下面是上面4种方法的代码/*HDC hdc;hdc=:GetDC(m_hWnd);MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);Lin

14、eTo(hdc,point.x,point.y);:ReleaseDC(m_hWnd,hdc);必须成对使用。*/*CDC *pDC=GetDC();pDC-MoveTo(m_ptOrigin);pDC-LineTo(point);ReleaseDC(pDC);必须成对使用。*/CClientDC dc(this);/*CClientDC dc(GetParent();dc.MoveTo(m_ptOrigin);dc.LineTo(point);此处不需要ReleaseDC,由于CClientDC会自动释放DC*/CWindowDC dc(this);/CWindowDC dc(GetPare

15、nt();/*CWindowDC dc(GetDesktopWindow();/此时可以在整个屏幕上画线。dc.MoveTo(m_ptOrigin);dc.LineTo(point);*/*CPen pen(PS_DOT,1,RGB(0,255,0);CClientDC dc(this);CPen *pOldPen=dc.SelectObject(&pen);dc.MoveTo(m_ptOrigin);dc.LineTo(point);dc.SelectObject(pOldPen);*/ 5)用Bitmap填充所画的矩形。CBitmap bitmap;bitmap.LoadBitmap(ID

16、B_BITMAP1);CBrush brush(&bitmap);CClientDC dc(this);dc.FillRect(CRect(m_ptOrigin,point),&brush);/CBRUSH:FromHandle是静态成员函数,所以可以用下面的方法调用。CBrush *pBrush=CBrush:FromHandle(HBRUSH)GetStockObject(NULL_BRUSH);CBrush *pOldBrush=dc.SelectObject(pBrush);dc.Rectangle(CRect(m_ptOrigin,point);dc.SelectObject(pOl

17、dBrush);m_bDraw=FALSE; 6)用其它颜色画线CClientDC dc(this);CPen pen(PS_SOLID,1,RGB(255,0,0);CPen *pOldPen=dc.SelectObject(&pen);/选中红色画笔if(m_bDraw=TRUE) dc.SetROP2(R2_BLACK);/设立绘画模式 dc.MoveTo(m_ptOrigin); /dc.LineTo(point); dc.LineTo(m_ptOld); /dc.MoveTo(m_ptOrigin); dc.MoveTo(m_ptOld); dc.LineTo(point); /m_

18、ptOrigin=point; m_ptOld=point;dc.SelectObject(pOldPen);4.MFC中隐式的包含了windows.h。为什么?由于在AFXV_W32.h文献中:/ This is a part of the Microsoft Foundation Classes C+ library./ Copyright (C) 1992-1998 Microsoft Corporation/ All rights reserved.在AFXWIN.h中/ Note: WINDOWS.H already included from AFXV_W32.H5.如何从句柄获得

19、对象的指针?答FromHandle6.类的静态成员函数可以由类名直接调用,也可以由对象调用。可以认为静态成员函数并不属于某个对象,它属于类自身。程序运营伊始,即使没有实例化类的对象,静态成员函数和静态成员变量已然有其内存空间。静态成员函数不能访问非静态成员变量!静态成员变量必须在类的外部初始化。当然假如并不打算用到静态成员变量,此时你可以不初始它。7.理解代码区,数据区,堆,栈!请见下面的简介:对于一个进程的内存空间而言,可以在逻辑上提成3个部份:代码区,静态数据区和动态数据区。动态数据区一般就是“堆栈”。“栈(stack)”和“堆(heap)”是两种不同的动态数据区,栈是一种线性结构,堆是一

20、种链式结构。进程的每个线程都有私有的“栈”,所以每个线程虽然代码同样,但本地变量的数据都是互不干扰。一个堆栈可以通过“基地址”和“栈顶”地址来描述。全局变量和静态变量分派在静态数据区,本地变量分派在动态数据区,即堆栈中。程序通过堆栈的基地址和偏移量来访问本地变量。 8.抽空看看李维的悟透Delphi有一回,我梦见自己变成了计算机时空世界里的一个对象。随着计算机世界的不断发展,我们这些对象已经不再象原始时代的对象那样仅仅为了获得生存的资源而不断的忙碌。我们的思想空前活跃,我门不仅思考我们为什么要在计算机世界里生存和运营,并且还大胆的研究和探索计算机世界的未知奥秘。我们已经知道整个计算机世界都是由

21、字节这一基本粒子构成,而字节又是由八个更细小的位粒子构成;我们还知道物质不灭定律,即任何一个对象的灭亡,只意味着对象结构的解体,并不会减少计算机世界中的任何字节或位粒子,而着这些物质又也许成为别的对象的一部分;甚至,我们还知道我们所处的世界是一个球体,由于,在越过经度$FFFFFFFF又回到了原点$00000000的位置。著名的物理学家对象牛顿早就发现各种对象之间存在一种普遍的联系,并且在对象的运动速度与对象大小的关系方面提出了著名的理论-牛顿力学。可是,后来牛顿这个对象却一直搞不懂到底是什么力量在无形地推动各种对象的运动。因此,他认为一定是发明整个计算机世界的上帝在推动各种对象的运动。后来他

22、成了上帝最虔诚的信徒。在牛顿对象死后不久,我们的计算机世界又诞生了一个更伟大的对象。他基于先有代码的执行才有执行的结果这一基本的因果论,提出了进程运动的时空是相对的这一伟大理论。他认为,在一个运动中进程空间中看另一个运动中的进程空间,时间和空间都不是绝对的,空间会弯曲。并且,任何对象的运动速度绝对不也许超过CPU的速度,CPU速度就是我们计算机世界里的光速。这位伟大的科学对象的名字就叫爱因斯坦,他的相对论在一开始是不被对象们理解的,可是后来的科学探索都证明了这一理论的对的性。他提出的代码能量和数据物质可以互相转换的理论,也后来制造的大规模毁灭性病毒核武器中得到验证。在梦的世界里,我快乐极了。我

23、一会儿变一变我的属性,一会儿又动动我的方法,一会儿感受一下外来的事件。没错,我的确就是一个实实在在的对象!过了一会我忽然明白,我本来就是一个对象,只是这个对象在梦中变成了现实世界的我哈哈!align=rightcolor=#000066此贴子已经被作者于2023-3-1 20:03:14编辑过/color/align 资料 发消息 回复 引用 推荐 收藏 顶楼 虎非龙 昵称:虎非龙 专家等级:学员 专家分:500 可用分等级:佃户 精华:0 帖子数:370 结帖率: 100% 注册时间:2023-07-11 23:28:00 发表于 2023-03-03 23:01:00 第 5 楼 第5课1

24、.CWnd:CreateSolidCaret创建插入符,ShowCaret()显示插入符。GetTextMetrics(),获得当前字体的一些信息。CWnd:CreateCaret()创建图象插入符 bitmap.LoadBitmap(IDB_BITMAP1);/此处的bitmap为成员变量! CreateCaret(&bitmap); ShowCaret(); TEXTMETRIC tm;/字体结构体 dc.GetTextMetrics(&tm);/ m_ptOrigin.y+=tm.tmHeight;/获得字体高度。2.VC中CString:LoadString(ID号),比较方便。3.途

25、径层的概念:有两种方法创建途径层: (1) pDC-BeginPath(); pDC-Rectangle(50,50,50+sz.cx,50+sz.cy); pDC-EndPath(); pDC-SelectClipPath(RGN_DIFF); (2) CSize sz=pDC-GetTextExtent(str); CRgn rn; rn.CreateRectRgn(0,50,sz.cx,sz.cy); pDC-SelectClipRgn(&rn,RGN_DIFF);途径层有什么作用?可以保护我们先前的文本或者图像不被后来画的覆盖。4.在View上输入文字的环节。 CFont font;/

26、创建字体对象 font.CreatePointFont(300,华文行楷,NULL);/设立 CFont *pOldFont=dc.SelectObject(&font);/将字体选择到DC中 TEXTMETRIC tm;/创建字体信息对象 dc.GetTextMetrics(&tm);/获得当前字体信息 if(0x0d=nChar)/解决回车键 m_strLine.Empty(); m_ptOrigin.y+=tm.tmHeight; else if(0x08=nChar)/解决退格键 COLORREF clr=dc.SetTextColor(dc.GetBkColor(); dc.Text

27、Out(m_ptOrigin.x,m_ptOrigin.y,m_strLine); m_strLine=m_strLine.Left(m_strLine.GetLength()-1); dc.SetTextColor(clr); else m_strLine+=nChar; CSize sz=dc.GetTextExtent(m_strLine); CPoint pt;/解决光标的位置 pt.x=m_ptOrigin.x+sz.cx; pt.y=m_ptOrigin.y; SetCaretPos(pt); dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLi

28、ne);/输出字体 dc.SelectObject(pOldFont);/将原先的字体选择回去。5.模拟卡啦OK变色的环节。 (1)设立定期器 (2)在定期器中加入如下代码/DEL m_nWidth+=5;/此为view的成员变量,初始值为0/DEL /DEL /DEL CClientDC dc(this);/DEL TEXTMETRIC tm;/DEL dc.GetTextMetrics(&tm);/DEL CRect rect;/DEL rect.left=0;/DEL rect.top=200;/DEL rect.right=m_nWidth;/DEL rect.bottom=rect.

29、top+tm.tmHeight;/此长方形的长度随着定期器的触发,逐渐增大/DEL /DEL dc.SetTextColor(RGB(255,0,0);/DEL CString str;/DEL str.LoadString(IDS_WEIXIN);/DEL dc.DrawText(str,rect,DT_LEFT);此函数的作用是将字符串输出到长方形中,但假如字符串的长度超过长方形的长度,多余的字符将被截断/DEL /DEL rect.top=150;/DEL rect.bottom=rect.top+tm.tmHeight;/DEL dc.DrawText(str,rect,DT_RIGH

30、T);/DEL /DEL CSize sz=dc.GetTextExtent(str);获得字符串的长度/DEL if(m_nWidthsz.cx)当长方形的长度大于字符串的长度后,将其重新归0/DEL /DEL m_nWidth=0;/DEL dc.SetTextColor(RGB(0,255,0);/DEL dc.TextOut(0,200,str);/DEL /DEL /DEL CView:OnTimer(nIDEvent);6.SetTimer也可以用回调函数来操作,但并不方便。以下是环节 (1) 在View的OnCreate消息响应函数中:SetTimer(1,1000,Timer2

31、Proc); (2) 回调函数的实现:void CALLBACK EXPORT Timer2Proc( HWND hWnd, / handle of CWnd that called SetTimer UINT nMsg, / WM_TIMER UINT nIDEvent, / timer identification DWORD dwTime / system time)/ MessageBox(CMainFrame *)AfxGetMainWnd()-m_hWnd),ddfaf,weixin,0);CMainFrame *pMain=(CMainFrame *)AfxGetApp()-m_

32、pMainWnd;/获得MainFrame的指针CTextView *pView=(CTextView *)pMain-GetActiveView();/获得view的指针CClientDC dc(pView);/构造DC dc.TextOut(333,222,hello world);/我们可以看出,使用回调函数时要获得窗口或者APP的指针,给我们的操作带来麻烦。并不方便。第6课1.当对某菜单添加消息响应函数时,4个类的消息响应优先顺序分别是:1.View;2.CDOC;3.CMainFrame.4.CWinAPP.为什么?请参阅进一步浅出2.消息分类:a;标准消息(以WM_开头的消息,但不

33、涉及ON_COMMAND);b;命令消息 ON_COMMAND(IDM_PHONE1, OnPhone1),菜单和工具栏的消息。c.通告消息:按钮,列表框发出的消息。CCmdTarget只能接受命令消息。而从CCmdTarget派生的CWnd可以接受命令消息,也可以接受标准消息。3.拟定菜单的索引号,注意从0开始,分隔符也算数。什么叫弹出菜单(Popup Menu)?一个子菜单只能有一个缺省菜单。 /GetMenu()-GetSubMenu(0)-SetDefaultItem(5,TRUE); str.Format(x=%d,y=%d,GetSystemMetrics(SM_CXMENUCHE

34、CK), GetSystemMetrics(SM_CYMENUCHECK);/获得系统的菜单的位图的大小。/* SetMenu(NULL);/移除菜单 CMenu menu; menu.LoadMenu(IDR_MAINFRAME); SetMenu(&menu); menu.Detach();*/增长菜单,此处detach(),假如是局部变量。4.void CMainFrame:OnUpdateEditCut(CCmdUI* pCmdUI) if(2=pCmdUI-m_nIndex) pCmdUI-Enable();/当此菜单显示时,设为可用。5.右键弹出菜单功能的实现方法有两个: a.Pr

35、oject-Add to Project-component and controls-文献夹VC components-Popup Menu OK b.用TrackPopupMenu()实现。 CMenu menu; menu.LoadMenu(IDR_MENU1); CMenu *pPopup=menu.GetSubMenu(0); ClientToScreen(&point); pPopup-TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, GetParent();6.动态创建菜单的方法: CMenu me

36、nu; menu.CreatePopupMenu();/ GetMenu()-AppendMenu(MF_POPUP,(UINT)menu.m_hMenu,WinSun); GetMenu()-InsertMenu(2,MF_BYPOSITION | MF_POPUP,(UINT)menu.m_hMenu,WinSun); menu.AppendMenu(MF_STRING,IDM_HELLO,Hello); menu.AppendMenu(MF_STRING,112,Weixin); menu.AppendMenu(MF_STRING,113,Mybole); menu.Detach();

37、GetMenu()-GetSubMenu(0)-AppendMenu(MF_STRING,114,Welcome); GetMenu()-GetSubMenu(0)-InsertMenu(ID_FILE_OPEN, MF_BYCOMMAND | MF_STRING,115,维新);/ GetMenu()-DeleteMenu(1,MF_BYPOSITION);/ GetMenu()-GetSubMenu(0)-DeleteMenu(2,MF_BYPOSITION);7.为动态创建的菜单增长消息响应的环节 a.在resource.h中增长#define IDM_HELLO 123 b.在Main

38、Frm.h中加入afx_msg void OnHello(); c.MainFrm.cpp中加入ON_COMMAND(IDM_HELLO,OnHello) d.最后加入void CMainFrame:OnHello() MessageBox(Hello!);8.动态增长电话号码本环节 a.解决WM_Char消息。假如回车,则清空字符串,窗口重绘invalidate,将人名加入到菜单中,将字符串保存集合类CStringArray中,用的是成员函数Add方法。 b.取出动态创建的菜单的数据的方法。 1)创建一个弹出菜单,弹出菜单下面有4个子菜单。将子菜单的ID号连续。 2)在resource.h中

39、添加#define IDM_PHONE1 123. 3)添加其消息响应函数。注意注释中的文字BEGIN_MESSAGE_MAP(CMenu2View, CView) /AFX_MSG_MAP(CMenu2View) ON_WM_CHAR() ON_COMMAND(ID_EDIT_COPY, OnEditCopy)/下面的4句代码本来在此处。 /AFX_MSG_MAP / Standard printing commands ON_COMMAND(IDM_PHONE1, OnPhone1)/一定要这4句代码移到此处。 ON_COMMAND(IDM_PHONE2, OnPhone2) ON_COM

40、MAND(IDM_PHONE3, OnPhone3) ON_COMMAND(IDM_PHONE4, OnPhone4) ON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CView:OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPreview)END_MESSAGE_MAP() 4)填写代码9.如何在MainFrame中拦截OnCommand消息?答,在它增长OnCommand的消息解决函数即可。10.错误调

41、试方法:Missing ; before * CMenu2Doc* GetDocument();/由于CMenu2Doc是个不结识的变量,将其头文献包含进即可。第7课1.假如在SDI中要调用对话框 a.先插入一个对话框资源; b.然后在ClassWizards中为其创建一个类。其目的是比较方便为添加按纽和消息响应函数。 c.然后实例化它。在实例化时,必须将其头文献包含进去。2.创建非模态对话框,注意它不能是局部变量。当 点击非模态对话框的OnOK按纽时,它并没有关闭,而是隐藏了。需要调用destroyWindow().3.一个对象只能一个按纽。为什么?由于在Wincore.cpp的628行有代

42、码 ASSERT(pWnd-m_hWnd = NULL); / only do once而创建后它的m_hWnd就不为0了。此处ASSERT的用法是假如括号里面不为真,则程序崩溃。4.如何为静态文本框增长消息响应?一方面将IDC_STATIC改名。同时还需要将Notify特性复选中。5.完毕加法功能。 a.GetDlgItem(); b.GetDlgItemText(); c.GetDlgItemInt(); d.将IDC_EDIT1关联CEDIT类型变量 e.将IDC_EDIT1关联int型变量。注意调用 UpdateData(); f. /:SendMessage(GetDlgItem(I

43、DC_EDIT1)-m_hWnd,WM_GETTEXT,10,(LPARAM)ch1); /:SendMessage(m_edit1.m_hWnd,WM_GETTEXT,10,(LPARAM)ch1); /GetDlgItem(IDC_EDIT1)-SendMessage(WM_GETTEXT,10,(LPARAM)ch1); m_edit1.SendMessage(WM_GETTEXT,10,(LPARAM)ch1); g. SendDlgItemMessage(IDC_EDIT1,WM_GETTEXT,10,(LPARAM)ch1); SendDlgItemMessage(IDC_EDIT

44、2,WM_GETTEXT,10,(LPARAM)ch2);6.点击按纽改变窗口尺寸 if(GetDlgItemText(IDC_BUTTON2,str),str=收缩); static CRect rectLarge; static CRect rectSmall; if(rectLarge.IsRectNull() CRect rectSeparator; GetWindowRect(&rectLarge); GetDlgItem(IDC_SEPARATOR)-GetWindowRect(&rectSeparator); rectSmall.left=rectLarge.left; rect

45、Small.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); 7.回车时将输入焦点移动到下一个控件

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 初中资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁