VC++.NET 技术内幕学习二

原创 2012年03月31日 13:19:47

第十一章、windows消息处理和多线程编程

          Windows提供了两种线程:辅助线程和用户界面线程。用户界面线程有窗口,因此它有自己的消息循环,辅助线程没有窗口,没有自己的消息循环。

主线程无法通过消息和辅助线程通信,简单的解决办法是通过全局变量通信。

辅助线程可以通过消息和主线程通信,尽量选择post消息,在模式对话框中使用send消息会出问题。

         使用 volatile 修饰符能够确保一个线程检索由另一线程写入的最新值。

MFC库为用户界面线程提供了很好的支持。您可以从CWinApp派生一个类,并使用AfxBeginThread的一个重载版本来启动线程。您从CWinApp派生的类有它自己的InitInstance函数,最重要的是,它有自己的消息循环,你可以根据需要构造窗口并映射一些消息。假如你允许用户运行应用程序的多个实例,但又希望所有的实例共享内存,你可以配置单个进程,让它运行多个用户界面线程。比如:windows explorer就是

 

第十二章、菜单、加速键、复文本编辑控件和属性表

知识点:

         大多数命令消息都来自应用程序的框架窗口,而不是应用程序框架,因此,框架窗口才是放置消息控制函数的地方。借助于命令传递系统,可以在任何地方对消息进行控制,传递顺序为:视图、文档、(MDI子框架窗口在前)SDI主框架窗口、应用程序。

弹出式对话框中的按钮发送命令消息时,应用程序框架会首先把该命令传递给主框架窗口,因为所有的弹出式对话框都属于主框架窗口,之后进行命令传递。

控件的Prompt的属性这样加:添加一个新的条码数据!(状态栏)\n 添加一个新的条码数据!(气泡提示)。

 

第十三章、工具栏和状态栏

遇到的问题:

一、SelectStockObject();与SelectObject();的区别?

virtual CGdiObject*SelectStockObject( int nIndex );

只能选用系统定义好的对象,且参数为整形。系统仅定义了常用的CFont、CBrush、CPen三种。

CGdiObject*SelectObject(CGdiObject* pObject);

参数为:a pointer to an object of oneof the classes derived from CGdiObject,可用得指针有CFont、CBrush、CPen、CRgn、CBitmap。

二、宽字符串的复制。

宽字符串的复制如:

Strcpy用wcscpy,sprintf用swprintf代替,常数或字符前加L

_T宏会根据情况选择Unicode还是ANSI。_T,TEXT和_TEXT都是一样的。

LPCTSTR并不是一个指向CString对象的指针,而是一个支持Unicode的const char *的替代版本。

 

例子一、

CStringstrText("test");

wcsncpy(strText.GetBuffer(5),L"T", 1);

strText.ReleaseBuffer();

ASSERT(strText== "Test");

 

例子二、

wcscpy(cf.szFaceName,_T("宋体"));  //有ZeroMemory(&cf, sizeof(cf)); 操作,所以此语句也可实现

wcsncpy(cf.szFaceName,_T("Times New Roman"), 32); 

 

 

知识点:

    控制栏包括工具栏和状态栏,它属于应用程序框架。所以,控制栏对象的构造、析构以及窗口的创建都是由应用程序框架来管理的,代码位于MainFrm中。

    状态栏可支持两种类型的文本窗口:信息行窗口和状态指示器窗口。

信息行窗格中显示的是程序动态提供的字符串。可以通过CStatusBar::SetPaneText成员函数来设置信息行的内容,以0为基数从左到右递增。如:

    CMainFrame*pFrame = (CMainFrame*) AfxGetApp()->m_pMainWnd;

    CStatusBar*pStatus = &pFrame->m_wndStatusBar;

    pStatus->SetPaneText(0,"message line for first pane");

状态指示器窗格总是被链接到一个字符串资源上,它是否被显示完全取决于相应的更新命令UI消息控制函数。指示器是由一个字符串资源ID来标示的,该ID也被用来传递更新命令UI消息。如:

ON_UPDATE_COMMAND_UI(ID_INDICATOR_CAPS,OnUpdateKeyCapsLock)   //消息映射

void CMainFrame::OnUpdateKeyCapsLock(CCmdUI*pCmdUI)

{

         pCmdUI->Enable(::GetKyeStatus(VK_CAPITAL)& 1);

}

《Spring技术内幕》学习笔记1——IoC容器体系结构

1. BeanFactory类结构体系: BeanFactory接口及其子类定义了Spring IoC容器体系结构,由于BeanFactory体系非常的庞大和复杂,因此要理解Spring IoC,需...
  • lcczzu
  • lcczzu
  • 2015年07月16日 10:47
  • 316

MySQL技术内幕InnoDB存储引擎学习笔记(第二章)

第二章 InnoDB存储引擎 一、实验环境 宿主机系统:windows7 虚拟机:OracleVMVirtualBox Linux:ubuntukylin-14.04.1-amd64.iso jdk:...
  • lanonola
  • lanonola
  • 2016年07月14日 20:19
  • 1207

《深入分析Java web技术内幕》笔记

堆:所有对象实例都在Java堆上分配内存,堆大小由-Xmx和-Xms调节; 方法区:存放虚拟机加载类的相关信息,如类静态变量和常量; 栈:存放线程调用方法时,存储局部变量表、操作、方法出口等与方法执行...
  • Jlinglinglei
  • Jlinglinglei
  • 2016年04月28日 17:22
  • 905

MySQL技术内幕InnoDB存储引擎学习笔记(第一章)

第一章 MySQL体系结构和存储引擎 一、实验环境 宿主机系统:windows7 虚拟机:OracleVMVirtualBox Linux:ubuntukylin-14.04.1-amd64.iso ...
  • lanonola
  • lanonola
  • 2016年07月13日 21:20
  • 1005

MySQL技术内幕系列 电子书 作者: 姜承尧

下载地址
  • Cloud_Strife_1985
  • Cloud_Strife_1985
  • 2017年07月15日 17:30
  • 544

第38课:Kafka源码解读Producer工作机制内幕

第38课:Kafka源码解读Producer工作机制内幕 1 producer 代码实例 2 producer 源码揭密 kafka 动态元数据刷新,对发送者而言,分布式...
  • duan_zhihua
  • duan_zhihua
  • 2016年07月02日 06:57
  • 927

深入分析JavaWeb技术内幕(修订版)》【PDF】下载

《深入分析JavaWeb技术内幕(修订版)》【PDF】下载链接: https://u253469.pipipan.com/fs/253469-230062569    内容简介 《深入分析Java ...
  • zhiyong499
  • zhiyong499
  • 2017年12月03日 17:47
  • 163

跟我一起学习MySQL技术内幕(第五版):(第三章学习日记10)

3.2.6.1date,time,和datetime类型 3.2.6.2timestamp数据类型 3.2.6.3year数据类型 3.2.6.4时态数据类型的属性 3.2.6.5时态...
  • CCyutaotao
  • CCyutaotao
  • 2016年05月23日 22:56
  • 1008

深入分析Java Web技术内幕pdf

下载地址:网盘下载 内容简介  · · · · · · 《深入分析Java Web技术内幕(修订版)》新增了淘宝在无线端的应用实践,包括:CDN 动态加...
  • cf406061841
  • cf406061841
  • 2017年07月31日 09:58
  • 361

我的第一本著作:Spark技术内幕上市!

现在各大网站销售中!京东:http://item.jd.com/11770787.html当当:http://product.dangdang.com/23776595.html亚马逊:http://...
  • anzhsoft2008
  • anzhsoft2008
  • 2015年09月20日 10:00
  • 51629
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC++.NET 技术内幕学习二
举报原因:
原因补充:

(最多只允许输入30个字)