var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-333696-1']); _gaq.push(['_trackPageview']); _gaq.push(['_trackPageLoadTime']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })();
  • 2011年06月30日

    MFC多线程

    分类:

    问个关于mfc多线程的问题

    MFC多线程基础

    MFC多线程编程注意事项

    VC++ MFC 多线程及线程同步

  • 2008年09月06日

    IDR_MAINFRAME资源

    分类:

    打开程序资源文件(*.rc),展开“String Table”,找到IDIDR_MAINFRAME的字符串资源,可看见它由“\n”字符分隔的7个字串,这可以从MFC生成向导第4对话框上看到。对于IDR_MAINFRAME资源,可以利用CDocTemplate::GetDocString来获取各个字串,也可以根据每个子串定义设置它:

    说明

    CDocTemplate::windowTitle

    主窗口标题栏上的字符串,仅在SDI程序出现,MDI程序将以IDR_MAINFRAME字符串为默认值。

    CDocTemplate::docName

    缺省文档的名称。缺省是无标题。

    CDocTemplate::fileNewName

    文档类型的名称。如果应用程序支持多种类型的文档,此字符串将显示在"File/New"对话框中。如果没有指定,就不能够在"File/New"对话框处理这种文件。

    CDocTemplate::filterName

    文档类型的描述和一个适用于此类型的通配符过滤器。这个字符串将出现在“File/Open”对话框中的文件类型列表框中。要和CDocTemplate::filterExt一起使用。

    CDocTemplate::filterExt

    文档的扩展名。如果没有指定,就不能够在“File/Open”对话框中处理这种文档。要和CDocTemplate::filterName一起使用。

    CDocTemplate::regFileTypeId

    如果你以::RegisterShellFileTypes向系统的注册表注册文件类型,此值会出现在HKEY_CLASSES_ROOT之下成为其子项,并仅供Windows内部使用。如果没有指定,这种文件类型就无法注册。

    CDocTemplate::regFileTypeName

    这也是存储在注册表中的文件类型名称。它会显示于程序中用以访问注册表的对话框内。

     

    因此,对于IDR_MAINFRAME资源标题(Caption)为:

    Hello\nNo Name\nGraphic\nText Files(*.txt)\n.txt\nGraphic.Document\nGraphic.Document

    来说,对应下图:

  • 2008年09月05日

    指针常量和常量指针

    分类:

    指针常量: Type * const pointer ;

    常量指针: const Type *pointer ;

     

    指针常量(char* constchar const* p)和常量指针(const char*,不存在const* char它无法通过编译)

    从右向左读(* 读成 pointer to)

    char * const p;        //读作p is a const pointer to char

    const char * p;        //读作 p is a pointer to const char

    char const * p;       // const char * p;读法一样,  C++标准规定const关键字放在类型或变量名之前等价)

     

    l  你能通过指针常量读写字符,但指针自身是一个常量,你无法改变它;而且在申明同时你必须用一个常量数值初始化它。

    l  你能通过常量指针字符,但你无法改变它;但指针自身能被改变。

     

    对一个多字节对象,在不同计算机系统中,其字节存储排列顺序不一样。有两种排列:一种称为little endian,即在存储器中从最低字节到最高字节顺序存储对象,如IntelAMD64;另一种排列规则称为big endian,在存储器中从最高字节到最低字节顺序存储对象,和平常的书写习惯一致,如Solaris

    Little Endian中汇编指令处理所有格式字节数几乎相同,同时因为地址偏移和字节数为一对一的关系(偏移0是字节0),因而相对容易写多精度数学程序;Big Endian中首先读高位字节,通过查看偏移0处字节通常你能验证此数是正数还是复数,你不需知道该数多长也不需要跳过任何字节查找字节包含的符号信息,数字也已它们被打印出的顺序存储,因此二进制到十进制程序特别有效。

  • 2008年08月01日

    图形的保存和重绘

    分类:

    1.     新建一个类保存图形的起点、终点、绘制类型、绘制颜色等等。

    2.     元文件。

    3.     兼容设备描述表。

     

    如果在绘制图形时想实时见到图形,这时应该在OnLButtonUp函数中进行两次绘制函数的调用:一次是用方法1或者方法2或者方法3,另一次是利用当前窗口DC调用图形绘制函数在窗口上绘制图形。这样绘制的图形不仅显示在当前窗口中,同时也被保存起来了。

  • 2008年07月24日

    Windows坐标空间和转换

    分类:

    Window中存在着四种坐标系统  

    1.     世界坐标空间――这个坐标系是在WindowsNT以后才加入的,它支持affine变换,可以通过它对图形进行平移、缩放、旋转等。  

    2.     页面坐标空间――这个是Windows中支持最早的逻辑坐标空间,它支持向设备坐标空间中的映射,这个坐标系中的单位是逻辑单位,类似于一个数学模型,该坐标系中容纳着所绘制的图形。  

    3.     设备坐标空间――这个可以理解为窗口客户区所对应的坐标系统,它是用来显示图形的。Windows中有3种设备坐标,以满足各种不同需要:  

    ①.   客户区域坐标,包括应用程序的客户区域,客户区域的左上角为(0,0)。

    ②.   屏幕坐标,包括整个屏幕,屏幕的左上角为(0,0)。屏幕坐标用在wm_move消息 中(对于非子窗口)以及下面的windows函数中:createwindowmovewindow(都对于非子窗口)getmessagegetcursorposgetwindowrectwindowfrompointsetbrushorg中。用函数clienttoscreenscreentoclient可以将客户区域坐标转换成屏幕区域坐标,或反之。

    ③.   全窗口坐标,包括一个程序的整个窗口,包括标题条、菜单、滚动条和窗口框,窗 口的左上角为(0,0)。使用getwindowdc得到的窗口设备环境,可以将逻辑单位转换成窗口坐标。

    4.     物理设备坐标空间――这个是物理设备设备平面所对应的空间,设备坐标空间是它的一部分。

    Win32 API把世界坐标空间和页面空间称为逻辑空间。如果应用程序调用了SetWorldTransform函数,那么映射就从应用程序的世界坐标系空间开始;否则,映射在页面空间中进行。

     

     

     

    逻辑和设备坐标间的相互转换

    xViewPortxViewExt是象素单位,xWindowxWinExt是逻辑单位。

    其中,(xWindow,yWindow)是待转换的逻辑点,(xViewport,yViewport)是转换后的设备坐标点。(xWinOrg,yWinOrg)是逻辑坐标的窗口原点,(xViewOrg,yViewOrg)是设备坐标的视口原点。

     

    MFC提供了转换函数      

    1.     CDC::DPtoLP――设备坐标转换为逻辑坐标  

    2.     CDC::LPtoDP――逻辑坐标转换为设备坐标

    Windows中,只有对需要设备环境句柄作参数的GDI函数,映射方式才会起作用。