![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MFC
kuankuan_qiao
这个作者很懒,什么都没留下…
展开
-
画笔和画刷
画笔是用来绘制线条、曲线以及勾勒形状轮廓。画刷用于与 Graphics 对象一起创建实心形状和呈现文本的对象。所以画笔多用于画线,而画刷就可以绘制圆形等图形原创 2012-05-09 14:04:36 · 483 阅读 · 0 评论 -
CCmdUI 简介
CCmdUI does not have a base class.When a user of your application pulls down a menu, each menu item needs to know whether it should be displayed as enabled or disabled. The target of a menu command转载 2012-05-09 18:49:58 · 990 阅读 · 0 评论 -
状态条SetPaneInfo 函数及 SetPaneText 函数
在创建状态条的代码后,用状态条的成员函数SetPaneInfo来设置每个窗格的ID、风格和宽度(单位似对话框,为1/4英文字母),其函数原型为 void SetPaneInfo( int nIndex, UINT nID, UINT nStyle, int cxWidth ); 其中nStyle可取值: SBPS_NOBORDERS 窗格周围无三维边框SBPS_POPOUT原创 2012-05-09 19:18:43 · 13186 阅读 · 0 评论 -
定时器
--------------------------------------------------------------------------------定时器的使用:三种方法如果您需要在整个程序执行期间都使用定时器,那么您将得从WinMain函数中或者在处理WM_CREATE消息时呼叫SetTimer,并在退出WinMain或响应WM_DESTROY消息时呼叫KillTimer。根原创 2012-05-09 19:25:19 · 635 阅读 · 0 评论 -
CPropertySheet 与CPropertyPage
原来自己在做TAB类型的窗口时,都是在窗口中增加一个CTabCtrl来实现 的,研究了下这个,网上有好多都不怎么详细,自己是对它们的总结吧。CPropertyPage 是一个从CDialog派生而来的一个类,基本功能与对话框类一样,CPropertySheet不是一个CDialog的派生类,他是派生自CWnd的,其实它就是一个CDialog上加了一个CTabCtrl的组合类现在来介绍它原创 2012-05-09 22:32:39 · 1397 阅读 · 0 评论 -
对话框验证
在MFC中运行程序开始的时候有个验证对话框,然后再显示主程序 1.在App::InitInstance()中初始化一个对话框 然后IDOK判断2. CMainFrame::OnCreate()中DoModal一个对话框复制搜索复制搜索原创 2012-05-10 11:58:38 · 430 阅读 · 0 评论 -
OnContextMenu
::OnContextMenu(CWnd* pWnd, CPoint point) { CMenu menuPopup;menuPopup.CreatePopupMenu();menuPopup.AppendMenu(0,ID_TEST1,"test1");menuPopup.AppendMenu(0,ID_TEST2,"test2");menuPopup.TrackPop原创 2012-05-09 15:13:57 · 478 阅读 · 0 评论 -
屏蔽Enter或是Esc键
一般来说,对于一个默认情况下的对话框程序,用户在运行的时候,如果不小心按下了Enter或是Esc键,程序就会立刻退出。因为:当用户按下Enter时, Windows就会自动寻找输入焦点(focus)落在哪一个按钮上(当前获得焦点的按钮即为当前选中的按钮,用Tab键可以来回切换,按钮四周将被点线包围)。此时,即使对话框中没有OK按钮,OnOK()函数也会被调用,对于普通的对话框程序来说,On原创 2012-05-09 15:26:33 · 710 阅读 · 0 评论 -
CPropertySheet::SetWizardMode
CPropertySheet::SetWizardModevoid SetWizardMode();说明:此成员函数用来建立一个作为向导的属性页。一个作为向导的属性页的一个关键特征就是:用户使用Next或Finish,Back和Cancel按钮而不是标签来导航。在调用DoModal之前调用SetWizardMode。在调用SetWizardMode之后,DoModal将返回ID原创 2012-05-10 10:34:17 · 1401 阅读 · 0 评论 -
串行化
MFC的默认文件菜单,提供了“新建”、“打开”、“保存”“另存为”等功能。序列化(串行化)是微软提供的用于对对象进行文件I/O的一种机制,该机制在框架(Frame)/文档(Document)/视图(View) 模式中得到了很好的应用。“打开”、“保存”、“另存为”都涉及到对象的串行化。一、 串行化条件一个类若需要支持串行化,则需要:Ø 这个类从CObject派生。串行化要原创 2012-05-10 22:20:49 · 2679 阅读 · 0 评论 -
使用GDI绘制直线
复制搜索复制搜索原创 2012-05-11 09:29:59 · 649 阅读 · 0 评论 -
CBrush
CBrush画刷定义了一种位图形式的像素,利用它可对区域内部填充颜色该类封装了Windows的图形设备接口(GDI)刷子。通过该类构造的CBrush对象可以传递给任何一个需要画刷的CDC成员函数。该画刷可以是实线、阴影线和某种图案1构造CBrush对象该类具有4个重载的构造函数,下面分别加以介绍CBrush;CBrush(COLORREF crColor);CBrush(i原创 2012-05-11 10:12:51 · 4598 阅读 · 0 评论 -
CFileFind::FindFile
CFileFind::FindFile virtual BOOL FindFile( LPCTSTR pstrName = NULL, DWORD dwUnused = 0 );参数pstrName以一个包含该文件的名称来找到指针。如果你传递pstrName空,FindFile (*.*)做了通配符搜索。dwUnused保留作出FindFile多态性与派生类。必须为0返原创 2012-05-11 14:46:32 · 3311 阅读 · 2 评论 -
STARTUPINFO
typedef struct _STARTUPINFO{ DWORD cb; //包含STARTUPINFO结构中的字节数.如果Microsoft将来扩展该结构,它可用作版本控制手段. //应用程序必须将cb初始化为sizeof(STARTUPINFO) PSTR lpReserved; //保留。原创 2012-05-11 19:44:50 · 769 阅读 · 0 评论 -
CreateThread
微软在Windows API中提供了建立新的线程的函数CreateThread,概述 当使用CreateProcess调用时,系统将创建一个进程和一个主线程。CreateThread将在主线程的基础上创建一个新线程,大致做如下步骤: 1在内核对象中分配一个线程标识/句柄,可供管理,由CreateThread返回 2把线程退出码置为STILL_ACTIV原创 2012-05-11 20:13:30 · 871 阅读 · 0 评论 -
CStatic和CEdit
GetDlgItem(ID)->SetWindowText(string)///////////////////////////////////////////////////////////////////////////GetDlgItem(IDC)->GetWindowText(LPTSTR,count);GetDlgItem(IDC)->GetWindowText(string原创 2012-05-10 15:53:12 · 502 阅读 · 0 评论 -
WM_NOTIFY
VC中的消息的分类有3种:窗口消息、命令消息和控件通知消息,我们这里要谈的是最后一种:控件通知消息。 控件通知消息,是指这样一种消息,一个窗口内的子控件发生了一些事情,需要通知父窗口。通知消息只适用于标准的窗口控件如按钮、列表框、组合框、编辑框,以及Windows公共控件如树状视图、列表视图等。例如,单击或双击一个控件、在控件中选择部分文本、操作控件的滚动条都会产生通知消息。 她类似于命令消原创 2012-05-10 18:56:41 · 634 阅读 · 0 评论 -
OnInitialUpdate
OnInitialUpdate概括 视图窗口完全建立后第一个被框架调用的函数。框架在第一次调用OnDraw前会调用OnInitialUpdate,因此OnInitialUpdate是设置滚动视图的逻辑尺寸和映射模式的最合适的地方。 时间上,两者先后顺序不同,构造函数生成本类的对象,但没有产生窗口,OnCreate后窗口产生, 然后才是视图的OnInitialUpDate,一般原创 2012-05-10 22:27:12 · 528 阅读 · 0 评论 -
CreateProcess
函数原型 BOOL CreateProcess ( LPCTSTRlpApplicationName, LPTSTRlpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes。 LPSECURITY_ATTRIBUTES lpThreadAttributes, B原创 2012-05-11 19:32:46 · 1637 阅读 · 0 评论 -
SECURITY_ATTRIBUTES
typedef struct _SECURITY_ATTRIBUTES { DWORD nLength; //结构体大小,可用sizeof取得 LPVOID lpSecurityDescriptor; //指向一个对象的安全描述符 该安全描述符控制对象的共享 如果为NULL 则该对象使用调用进程的默认安全描述符 BOOL bInheritHandle;原创 2012-05-11 19:41:52 · 5967 阅读 · 1 评论 -
PROCESS_INFORMATION
typedef struct _PROCESS_INFORMATION { HANDLE hProcess; // 存放每个对象的与进程相关的句柄 HANDLE hThread; // 返回的线程句柄 DWORD dwProcessId; // 用来存放进程ID号 DWORD dwThreadId; // 用来存放线程ID号} PROCESS_INFORMATION,原创 2012-05-11 19:57:19 · 908 阅读 · 0 评论 -
AfxGetApp()
AfxGetApp( )是全局的。CWinApp* AfxGetApp( );Return ValueA pointer to the single CWinApp object for the application.//返回一个应用程序的CWinApp对象的指针RemarksThe pointer returned by this function can原创 2012-05-11 21:57:41 · 755 阅读 · 0 评论 -
lParam 和 wParam
lParam 和 wParam 是宏定义,一般在消息函数中带这两个类型的参数,通常用来存储窗口消息的参数。LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);wParam 通常用来存储小段信息,如,标志lParam 通常用于存储消息所需的对象LRESULT CALLBACK原创 2012-05-10 19:19:31 · 5936 阅读 · 0 评论 -
使用GDI绘制点
复制搜索复制搜索原创 2012-05-11 09:25:40 · 549 阅读 · 0 评论 -
使用GDI绘制矩形
复制搜索复制搜索原创 2012-05-11 09:44:40 · 669 阅读 · 0 评论 -
BitBl
BitBlt原型BOOL BitBlt( HDC hdcDest, 指向目标设备环境的句柄。 int nXDest, 指定目标矩形区域左上角的X轴逻辑坐标。 int nYDest, 指定目标矩原创 2012-05-11 10:23:11 · 704 阅读 · 0 评论 -
CPen类
CPen画笔是一种用来画线及绘制有形边框的工具,用户可以指定它的颜色及厚度,并且可以指定它画实线、点线或虚线。CPen类,该类封装了Windows图形设备接口(GDI)画笔,主要通过构造函数来创建绘图对象。1构造CPen对象该类共重载了3个构造函数,下面分别进行详细说明CPen();CPen(int nPenStyle,int nWidth,COLORREF crColor);原创 2012-05-11 09:57:25 · 3449 阅读 · 0 评论 -
CDocument::SetModifiedFlag
CDocument类成员 CDocument::SetModifiedFlag void SetModifiedFlag(BOOL bModified = TRUE); 参数: bModified 文档是否被修改的标记。 说明: 在对文档作了修改之后调用该函数。连续调用以确保在关闭之前框架提示用户保存这些变化。通常使用bModified参数的缺省值TRUE。要标原创 2012-05-11 13:58:32 · 2583 阅读 · 0 评论 -
CFile::Abort
CFile::Abortvirtual void Abort( ):说明:关闭与此对象相关联的文件并使文件不可读、写,如果在析构此对象时未关闭文件,则构造函数关闭它。在处理异常时,CFile::Abort与CFile::Close有两大区别。首先,Abort函数不会因失败产生异常值,因为Abort忽略失败;其次,如果文件未被打开或已经关闭,Abort不会插入断言。如果用原创 2012-05-11 14:08:49 · 873 阅读 · 0 评论 -
sprintf
在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。sprintf 是个变参函数,定义如下:int sprintf( char *buffer, const char *format [, a原创 2012-05-11 19:25:25 · 481 阅读 · 0 评论 -
创建线程的三种方法
MFC中有两类线程,分别称之为工作者线程和用户界面线程。二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环。 工作者线程没有消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等。用户界面线程一般用于处理独立于其他线程执行之外的用户输入,响应用户及系统所产生的事件和消息等。但对于Win32的API编程而言,这两种线程是没有区别的,它们都原创 2012-05-11 20:59:47 · 7411 阅读 · 0 评论 -
GetSafeHwnd()
CWnd::GetSafeHwnd (这是CWnd的一个成员函数)HWND GetSafeHwnd()const;(这是个const 函数)Return ValueReturns the window handle for a window. Returns NULL if the CWnd is not attached to a window or if it is us原创 2012-05-11 21:54:52 · 5507 阅读 · 1 评论 -
线程间的同信
一般而言,应用程序中的一个次要线程总是为主线程执行特定的任务,这样,主线程和次要线程间必定有一个信息传递的渠道,也就是主线程和次要线程间要进行通信。这种线程间的通信不但是难以避免的,而且在多线程编程中也是复杂和频繁的,下面将进行说明。一、使用全局变量进行通信由于属于同一个进程的各个线程共享操作系统分配该进程的资源,故解决线程间通信最简单的一种方法是使用全局变量。对于标准原创 2012-05-14 13:01:53 · 484 阅读 · 0 评论 -
线程的基础知识
1. 进程与线程有那些区别和联系? 每个进程至少需要一个线程。 进程由两部分构成:进程内核对象,地址空间。线程也由两部分组成:线程内核对象,操作系统用它来对线程实施管理。线程堆栈,用于维护线程在执行代码时需要的所有函数参数和局部变量。 进程是不活泼的。进程从来不执行任何东西,它只是线程的容器。线程总是在某个进程环境中创建的,而且它的整个寿命期都在该原创 2012-05-14 13:11:17 · 465 阅读 · 0 评论 -
线程间的同步
虽然多线程能给我们带来好处,但是也有不少问题需要解决。例如,对于像磁盘驱动器这样独占性系统资源,由于线程可以执行进程的任何代码段,且线程的运行是由系统调度自动完成的,具有一定的不确定性,因此就有可能出现两个线程同时对磁盘驱动器进行操作,从而出现操作错误;又例如,对于银行系统的计算机来说,可能使用一个线程来更新其用户数据库,而用另外一个线程来读取数据库以响应储户的需要,极有可能读数据库的线程读取的是原创 2012-05-14 13:14:23 · 474 阅读 · 0 评论 -
AfxBeginThread
MFC中有两类线程,分别称之为工作者线程和用户界面线程。二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环。 工作者线程没有消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等。用户界面线程一般用于处理独立于其他线程执行之外的用户输入,响应用户及系统所产生的事件和消息等。但对于Win32的API编程而言,这两种线程是没有区别的,它们都原创 2012-05-14 13:29:15 · 2556 阅读 · 0 评论 -
多线程的提出
一、问题的提出编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下:void CSingleThreadDlg::OnSleepSixSecond() { Sleep(6000); //原创 2012-05-14 13:31:34 · 569 阅读 · 0 评论 -
自定义消息在进程间通讯
进程间通讯应该是老的内容了,相信用VC的大侠们都知道,书本上也都有介绍。我在这只是对自己用过的东西简单的总结一下,希望对有兴趣者有帮助。WINDOWS中进程间通讯的方式很多,如:消息机制,共享内存机制,SOCKET,COM,RPC等等,需要时可以根据具体情况来选择使用的方式。我在这本文中仅介绍进程间的自定义消息通讯机制。1,WINDOWS中自定义消息的定义和使用;在WNDOWS中消息分原创 2012-05-14 13:34:11 · 788 阅读 · 0 评论 -
使线程同步
使线程同步 在程序中使用多线程时,一般很少有多个线程能在其生命期内进行完全独立的操作。更多的情况是一些线程进行某些处理操作,而其他的线程必须对其处理结果进行了解。正常情况下对这种处理结果的了解应当在其处理任务完成后进行。 如果不采取适当的措施,其他线程往往会在线程处理任务结束前就去访问处理结果,这就很有可能得到有关处理结果的错误了解。例如,多个线程同时访问同一个全局变量,如果原创 2012-05-14 14:17:59 · 1401 阅读 · 0 评论 -
MFC的DLL
MFC的DLL 一般的,在介绍Windows编程的书中讲述DLL的有关知识较多,而介绍MFC的书则比较少地提到。即使使用MFC来编写动态链接库,对于初步接触DLL的程序员来说,了解DLL的背景知识是必要的。另外,MFC提供了新的手段来帮助编写DLL程序。所以,本节先简洁的介绍有关概念。 DLL的背景知识 静态链接和动态链接 当前原创 2012-05-15 10:02:09 · 764 阅读 · 0 评论