随笔分类 -  MFC

摘要:我们有时候想在单文档的界面上面实现多视图,实现的方法就是对原文档的界面进行分割,以N行M列的形式分割,当然分割也可以递归进行,分割完一次以后,我们还可以在已经分割的其中一个试图上再次分割。 下面举个例子,把一个单文档界面切分成4块。效果如下图所示。 分割的步骤就是先分成1行2列,然后再把分好的第二列分成3行一列(注意的是这里的行列标号都是从0开始的,我们说的第二列其实是1列,前面的是0列) 下面看实现的方法。 1 首先我们建立4个对话框,ID分别为IDD_TREE1 IDD_LIST1 IDD_TREE2 IDD_LIST2注意对话框的style要选child。2 建立4个View... 阅读全文
posted @ 2013-10-17 11:10 陳さん様 阅读(241) 评论(0) 推荐(0)
摘要:非本人撰写,引自:http://blog.csdn.net/nma_123456/article/details/7548836在MFC中M$引入了文档-视结构的概念,文档相当于数据容器,视相当于查看数据的窗口或是和数据发生交互的窗口。(这一结构在MFC中的OLE,ODBC开发时又得到更多的拓展)因此一个完整的应用一般由四个类组成:CWinApp应用类,CFrameWnd窗口框架类,CDocument文档类,CView视类。(VC6中支持创建不带文档-视的应用)在程序运行时CWinApp将创建一个CFrameWnd框架窗口实例,而框架窗口将创建文档模板,然后有文档模板创建文档实例和视实例,并将 阅读全文
posted @ 2013-10-16 11:43 陳さん様 阅读(287) 评论(0) 推荐(0)
摘要:文档类、子框架类及视图类的关系及如何相互调用 收藏 了解文档和视图的相互作用关系是编写MFC程序的基本功。但是MFC的应用程序框架把文档和视图之间的关系封装了起来,初学的朋友往往不得要领,因此写程序往往被局限于在用向导生成的框架中。本文希望能够尽可能说明白文档视图框架之间是如何进行作用,希望能给一些朋友带来小小的帮助。 几个概念: (虽然大家都知道了,雷神还是要重申一次) 文档对象:是用来保存数据的。 视图对象:是用来显示和编辑数据的。 应用程序框架:框架是用来管理不同文档显示界面的。例如你有一个数据网格显示界面,还有一个图形显示界面,它们的数据可能都来自你的文档,但是视图不同,怎么... 阅读全文
posted @ 2013-10-16 10:48 陳さん様 阅读(600) 评论(0) 推荐(0)
摘要:文章转载于MAOZHAOYANG的博客,在此表示感谢!MFC程序的默认的标题是“无标题-title”,其中title是应用程序的名称,我们应如何修改MFC窗口标题来符合自己的要求? MFC程序的文档类中定义了一个虚函数SetTitle,用于设置窗口标题的前半部分,如果只是要修改“无标题”部分,可以重载文档类的该函数。窗口标题的后半部分可以通过SetWindowText设置,也可以编辑字符串资源中的IDR_MAINFRAME字符串,将第一个\n之前的字符串替换掉即可,而如果你想把“无标题”部分除掉,则必须修该窗口的风格。一、修改前半部分1) 可以重载文档类的虚函数SetTitlevoid CTe 阅读全文
posted @ 2013-10-16 10:01 陳さん様 阅读(240) 评论(0) 推荐(0)
摘要:在文档试图应用程序,有时需要在工作区切换试图,以下就是如何切换试图了1.创建要切换的视图类,同时把构造函数,Create函数改变为public2.在需要切换试图的动作响应中,加入切换代码,一般是在CMainFrame的菜单响应中加:void CMainFrame::On32771(){// TODO: Add your command handler code hereCView *pOldActiveView=GetActiveView();//旧视图CMyView *pNewActiveView=new CMyView();//要切换的视图CCreateContext context;co 阅读全文
posted @ 2013-10-16 09:26 陳さん様 阅读(779) 评论(0) 推荐(0)
摘要:CTreeCtl的使用的一点总结:一、设置与tree control控件相关联的图片列表CImageList imageList;CTreeCtl treeCtl;imageList.Create(IDB_BITMAP, 16, 1, RGB(255,255,255));treeCtl.SetImageList( imageList, TVSIL_NORMAL );二、tree control标签基本拖动的实现(参考vckbase中,树型控件拖动的完美实现 作者:一块三毛钱 http://www.vckbase.com/document/viewdoc/?id=340)1、拖动时,控件会发送T 阅读全文
posted @ 2013-10-15 14:15 陳さん様 阅读(387) 评论(0) 推荐(0)
摘要:函数功能:该函数得到指定图形对象的信息,根据图形对象,函数把填满的或结构,或表项(用于逻辑调色板)数目放入一个指定的缓冲区。 函数原型:int GetObject(HGDIOBJ hgdiobj, int cbBuffer, LPVOID lpvObject); 参数: hgdiobj:指向感兴趣的图形对象的句柄,它可以是这样的一个句柄:一个逻辑位图、一个刷子、一种字体、一个调色板、笔或通过调用CreateDIBsection函数创建的与设备无关位图。 cbBuffer:指定将要写到缓冲区的信息的字节数目。 lpvObject:指向一个缓冲区的指针,该缓冲区将要检索指定图形对象的信息... 阅读全文
posted @ 2013-09-25 12:45 陳さん様 阅读(781) 评论(0) 推荐(0)
摘要:CString和char*转换因为需要,用VC做windows窗体的界面,在C的函数中有不少是使用char*作为参数的,因此有一个必不可少的步骤就是把CString转换为shar*字符串。使用CString的GetBuffer方法 CString origCString("Hello,World"); char* CharString = origCString.GetBuffer(origCString.GetLength()+1); 网上的很多文章说的都是这个方法,但是我在VC++2005中编译得到下列信息 :Error 1 error C2440: 'init 阅读全文
posted @ 2013-09-25 12:42 陳さん様 阅读(201) 评论(0) 推荐(0)
摘要:先来看CreateEx函数:BOOL CWnd::CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName,LPCTSTR lpszWindowName, DWORD dwStyle,const RECT& rect, CWnd* pParentWnd, UINT nID,LPVOID lpParam /* = NULL */){return CreateEx(dwExStyle, lpszClassName, lpszWindowName, dwStyle,rect.left, rect.top, rect.right - rect.left, 阅读全文
posted @ 2013-09-25 12:39 陳さん様 阅读(229) 评论(0) 推荐(0)
摘要:1. 如何获取应用程序的实例句柄? 应用程序的 实例句柄保存在CWinAppIm_hInstance 中,可以这么调用 AfxGetInstancdHandle获得句柄. Example: HANDLE hInstance=AfxGetInstanceHandle();2. 如何通过代码获得应用程序主窗口的指针? 主窗口的 指针保存在CWinThread::m_pMainWnd中,调用 AfxGetMainWnd实现。 AfxGetMainWnd() ->ShowWindow(SW_SHOWMAXMIZED); //使程序最大化.3. 如何在程序中获得其他程序的 图标? 两种方法: (1 阅读全文
posted @ 2013-09-21 21:35 陳さん様 阅读(347) 评论(0) 推荐(0)
摘要:AFX_MANAGE_STATE(AfxGetStaticModuleState())的作用:用于模块切换时的状态保护,1.AfxGetStaticModuleState()指向当前模块状态;2.当前函数调用结束后原模块的状态自动被恢复;3.用于DLL中所调用MFC函数、类、资源时的模块状态切换;[MSDN]By default, MFC uses the resource handle of the main application to load the resource template. If you have an exported function in a DLL, such.. 阅读全文
posted @ 2013-09-11 09:44 陳さん様 阅读(278) 评论(0) 推荐(0)
摘要:OnLButtonDown函数虽然可以随时改变一个m_nColor的值,但是如果只是这样的话,OnDraw函数是不会调用的(除非用户改变视图的大小),因此,OnLButtonDown函数必须调用InvalidateRect函数(它是CMyView类从CWnd继承过来的成员函数),它能触发Windows的WM_PAINT消息,该消息又在CView类被映射,以引起对OnDraw的调用。如果有必要,OnDraw函数还可以访问传给InvalidateRect的"无效矩形区域"参数。 有两种情况可以优化Windows的绘制过程。第一,我们必须知道WIndows只更新无效的矩形内部的像 阅读全文
posted @ 2013-07-27 13:46 陳さん様 阅读(305) 评论(0) 推荐(0)
摘要:2013-07-04在辅助线程的循环里检查一个全局变量很有意义,那么如果主线程这样做会怎么样呢?当然应该杜绝那么比较笨重的函数;UINT ComputerThreadProc(LPVOID pParam){ g_nCount = 0; while(g_nCount < 100){ //Do some computation here ::InterlockedIncrement((long*)&g_nCount); } return 0;}其实我们并不想让主线程进入一个循环,因为那样会浪费CPU周期,而且主线程总是有一个消息循环。这就是说,主线程有一个窗口(可见或不可见... 阅读全文
posted @ 2013-07-04 17:15 陳さん様 阅读(756) 评论(0) 推荐(0)
摘要:MFC中初始化Dialog上的控件一般在OnInitDialog()函数中本文转载自:http://blog.csdn.net/charcy/article/details/5628171OnInitDialog()函数是个virtual(虚函数),在它的类中用添加虚函数的方法,会发现添加的虚函数里面没有这个函数,而这个OnInitDialog函数是很有用的,在一般的添加进去的对话框的类中是不会有这个函数的,必须手工增加进去,当然不用手工写代码,手动添加时可能会出错.可以通过VC加进去,而要加的这个函数的名字不是OnInitDialog,所以很难找到.其原因是因为要加的函数是WM_INITDI 阅读全文
posted @ 2013-03-12 15:46 陳さん様 阅读(3021) 评论(0) 推荐(0)