MFC中提供了CString的类,可以用在一切使用字符串的地方。可以完美取代const char* 或者 LPCTSTR(经常在WinAPI)中传递参数。并且如果需要通过空间进行字符串的数据传递DDX机制,则必须通过CString类型传递。

  使用编辑框控件

  添加对话框上的编辑框下的控件类型,通过如下类向导的方式:将控件ID与控件类型的成员变量关联。在类别中定义的是空间类别,或者是值类别。注意如果是值类别的时,则需要定义如果使用string类型,则必须使用CString类型。

  

  序列化与反序列化

  序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

  序列化的详细分析概述参考博客:http://www.cnblogs.com/icmzn/articles/5724422.html

  对话框的初始化

  CWnd::   BOOL UpdateData( BOOL bSaveAndValidate = TRUE );

  如果调用的时候:FALSE,使用当前的空间变量初始化对话框中的空间(初始化对话框)。 TRUE(默认):则取回控件的参数到关联参数中(参数检索)。

  当一个模式对话框在 CDialog::OnInitDialog的默认实现时,创建该框架将自动调用 UpdateData 和 bSaveAndValidate 设置为 FALSE。 在对话框中,可见之前,调用发生。 CDialog::OnOK 的默认实现调用与 bSaveAndValidate 的此成员函数设置为 TRUE 检索数据,并且,如果成功,将关闭对话框。 (如果取消按钮在对话框中单击,对话框关闭的不检索的数据。)

  也可以实时调用,跟新对话框参数与空间关联成员的数据流向。

  CWnd::GetCapture

  函数原型:static CWnd* PASCAL GetCapture( );

  标识具有鼠标捕获的窗口。 如果窗口不具有鼠标捕获,它是 NULL。只有一个窗口在任何给定时间具有鼠标捕获。 当 SetCapture 成员函数调用时,窗口收到鼠标捕获。

bool bOwnCapture(void) { return GetCapture()==this; };//判定当前窗口是否补货鼠标

  CWnd::SetCapture

  不管光标的位置(即使不在本窗口的区域),使所有后续鼠标输入发送到当前 CWnd 对象。目的是当前线程的窗口对后续的所有鼠标形成独占。这样后续所有的GetCapture()==this 结果都是true,指向本身Wnd对象。

当 CWnd 不再需要任何鼠标输入时,应用程序应调用 ReleaseCapture 功能,以便其他窗口可以接收鼠标输入。

   BOOL WINAPI ReleaseCapture(void);

    在当前线程中释放鼠标捕获。并保存鼠标的正常状态。这样解除当前线程中窗口对鼠标的独占。

   SHORT WINAPI GetKeyState( _In_ int nVirtKey);

    返回指定Key键的状态,该状态可以确认此键是按下,或者没有按下,或者 toggled。如果是字母或者数字(A through Z, a through z, or 0 through 9),需要指定ASCII的值。如果为其他的按键,则需要使用WIN定义的虚拟按键带啊:如鼠标左键VK_LBUTTON 。

   返回short类型,If the high-order bit is 1, the key is down; otherwise, it is up. 即如果最高位为1 位负数则<0, 按下。0,正数,抬起。

  HCURSOR WINAPI SetCursor(  _In_opt_ HCURSOR hCursor);

  设置鼠标的光标的形状。是Win系统API。HCURSOR hCursor必须通过(1)CreateCursor创建,(2)或者LoadCursor加载,(3)或者LoadImage加载。如果为NULL,则光标将从屏幕消失。

  只有当屏幕的光标与之前的不同时,这个函数才起作用。光标是公共资源,一个窗口只有窗口获取鼠标进入窗口内部,或者窗口捕获鼠标的时刻进行修改光标形状。

AfxGetApp()->LoadCursor(id),则此ID的光标将可以直接通过setCursor使用。

m_hDefaultCursor=AfxGetApp()->LoadStandardCursor(IDC_ARROW);//默认光标的加载

  BOOL WINAPI GetCursorPos(  _Out_ LPPOINT lpPoint);

  在屏幕坐标系中,返回当前鼠标位置。

  void ScreenToClient( LPPOINT lpPoint ) const; void ScreenToClient( LPRECT lpRect ) const;

  将屏幕坐标转化为当前窗口的客户区坐标。新坐标是相对于本窗口Wnd的左上角的原点坐标。

  GetClientRect(&cr);

  获取当前窗口的整个客户区。

endl;

  

MFC中的一般经验之谈5的更多相关文章

  1. MFC中的一般经验之谈4

    MFC中的窗口控件,都是从CWnd类中继承的.MFC以及ResourceEditor支持的所有控件称为标准控件. 在对话框资源文件夹下,然后邮件新建添加新对话框,新建对话框后要在资源视图中的对话框文件 ...

  2. MFC中的一般经验之谈3

    Window消息可以分为三类:(1)标准Window消息(CWnd子类处理),(2)控制通知消息(CWnd子类处理),(3)命令消息(应用中的5类都可以).所有派生自CCmdObjec对象的类都可以处 ...

  3. MFC中的一般经验之谈2

    MFC一般类成员m_iAge,命名原则,且MFC中类定义以C开头原则,这些原则便于理解以及增强代码的可读性.MFC是一个用窗口作为用户交互的方式,一般框架类.视图类.以及窗口上的控件都是继承CWnd类 ...

  4. MFC中的一般经验之谈----OnInitialUpdate

    在MFC程序设计中,按照传统的设计,如果处理WM_PAINT消息,一般会派生一个OnPaint函数,映射到WM_PAINT消息上进行绘图处理.但是很多程序中并没有出现OnPaint,一个OnDraw函 ...

  5. MFC中使用FLASH

    一.准备工作 第一步:下载并安装Adobe Flash Player. 从官方网站(http://get.adobe.com/cn/flashplayer/)上下载最新的Flash Player(大约 ...

  6. MFC中换行实现

    在mfc中编辑框允许输入多行时,换行符被表示为<归位><换行>即"\r\n",用ascii码表示为13 10 如果为编辑框中想要输入换行,就请将编辑框的属性 ...

  7. MFC中的各种DC区别

    转载自:xntop的<区别MFC中的CClientDC.CWindowDC.CPaintDC.CMetaFileDC> CClientDC及其子类 1. CClientDC类只能在客户区绘 ...

  8. VC++ MFC中如何将应用程序的配置信息保存到注册表中(二)

    在上一篇中介绍了几个写入注册表数据和读取注册表数据的接口,并介绍了使用方法. 这一片教你如何使得你的应用程序在下次打开时保持上一次关闭前的状态. 在上一篇添加的代码的基础上,要添加WM_CLOSE消息 ...

  9. MFC中对话框类(Dialog)的应用

    转载http://hi.baidu.com/jackywdx/item/feee8041d2c2e12310ee1e85 Windows应用程序通常是通过对话框接收用户输入.向用户输出信息,本节介绍应 ...

随机推荐

  1. security自动登陆

    package*.security; import java.util.ArrayList; import javax.servlet.http.Cookie; import javax.servle ...

  2. SpringCloud初体验:一、Eureka 服务的注册与发现

    Eureka :云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移. Eureka 可以大致理解为 房产中介 和 房东 的关系,房东想让租客租房子,首先要把房子 ...

  3. C#多线程编程之:异步方法调用

    异步方法 当一个线程调用方法后,直到方法执行完毕,线程才继续执行,这种方法被称为同步方法.然而,有些方法执行时间可能非常长,比如串口操作或访问网络,这样线程被阻塞,而无法响应用户的其他请求.这种情况通 ...

  4. emacs之配置2,UI基本设置

    在-下建立目录emacsConfig,里面建立一些自己写的el脚本,下面是名字随便,我的 emacsConfig/ui-setting.el ;关闭Emacs的默认启动界面 (setq inhibit ...

  5. 慕课网 -- 性能优化之PHP优化总结笔记

    视频链接,感兴趣的可以去看看,对我来说耳目一新. http://www.imooc.com/learn/205 什么情况下遇到PHP性能问题 1 :PHP语法使用不恰当 2 :使用了PHP语言他不擅长 ...

  6. spring 源码如何导入到eclipse

    spring 源码如何导入到eclipse spring源码解析——spring源码导入eclipse spring framework源码下载并导入eclipse

  7. [ML] CostFunction [Octave code]

    function J = computeCostMulti(X, y, theta) m = length(y); % number of training examples J = 0; for i ...

  8. Nginx 实现 IP+项目名 访问

    参考: https://blog.csdn.net/csdn1152789046/article/details/51362735 修改前 项目放在Tomcat的webapps/ROOT/ 目录下面 ...

  9. javascript中所谓的“坑”收录

    坑一: // 反例myname = "global"; // 全局变量function func() { alert(myname); // "undefined&quo ...

  10. outlook更改邮件存储路径

    由于司邮箱容量磁盘配额很小,没收几封邮件就提示邮箱容量已满请删除不重要的邮件很是烦人,于是乎就想着怎么把邮件存到本地然后自动删除服务器上的邮件不做备份,这样就不会在提示邮箱容量已满了,就不用担心发不出 ...