MFC底层窗口实现】的更多相关文章

简要说明 MFC是微软的一个基础类库,如果在Windows平台上做GUI的开发,这是一个不错的选择.简单的记录MFC学习过程中的需要掌握或者后期需要查看的知识点. Windows消息机制 操作系统首先捕获到来自键盘或鼠标等输入系统的消息,并将获取到的消息存放到消息队列中. 应用程序一直通过GetMessage()从消息队列中获取消息. 应用程序再将获取到的消息通过DispatchMessage()分派到操作系统 操作系统再执行"窗口过程" Windows编程模型 WinMain函数的定…
1.CWinApp(包括了这个类的导出类):代表了我们的程序.封装了消息循环等. 2.CFrameWnd:代表了程序的框架窗口.封装了窗口的注册.创建.显示.刷新.等等窗口操作. 3.Win32中.一个窗口:注册->显示->信息循环. 4.CFrameWnd类来做窗口. 4.1. //创建一个代表框架窗口的类对象 CFrameWnd *pFrame = new CFrameWnd; //在框架窗口和主程序类之间建立联系 this->m_pMainWnd = pFrame; //创建窗口…
  https://blog.csdn.net/deep_kang/article/details/72722692: MFC更换图标,图像默认为MFC,主要步骤有三步. 第一步 找到一张图片(坑点:必须为ico文件,不能单纯的改名,否则会出错,我是通过网上在线将一张jpg图片转换成ico文件),放置到项目所在目录的res目录下(我的目录为F:\C++\MFCApplication1\MFCApplication1\res). 第二步 然后在资源视图右击icon文件夹,添加资源->导入->选择…
[转]VC 隐藏模块 void HideDll() { HMODULE hMod = ::GetModuleHandle("MyHook.dll"); PLIST_ENTRY Head,Cur; PPEB_LDR_DATA ldr; PLDR_MODULE ldm; __asm { mov eax , fs:[0x30] mov ecx , [eax + 0x0c] //Ldr mov ldr , ecx } Head = &(ldr->InLoadOrderModule…
一.创建MFC后 窗口显示的是 无标题-工程名 修改方法在网上看到了几种,下面介绍下比较简单的一种: 1.在MianFrame.c文件中找到这个函数 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) 2.在函数中添加这样一句可以 修改标题名称 m_strTitle = "我的标题v1.0"; 3.在函数中添加如下代码可以去除无标题几个字 cs.style &= ~FWS_ADDTOTITLE ;//防止MFC在窗口标题…
MFC中窗口重绘 摘自:http://blog.csdn.net/shuilan0066/article/details/5859057 在刷新窗口时经常要调用重绘函数 MFC提供了三个函数用于窗口重绘 InvalidateRect(&Rect) Invalidate() UpdateWindow() 当需要更新或者重绘窗口时,一般系统会发出两个消息WM_PAINT(通知客户区有变化)和 WM_NCPAINT(通知非客户区有变化)WM_NVPAINT系统会自己搞定WM_PAINT消息对应的函数是…
分割窗口概述 分割窗口,顾名思义,就是将一个窗口分割成多个窗格,在每个窗格中都包含有视图,或者是同一类型的视图,或者是不同类型的视图. MFC分割窗口的方式有两种,动态分割和静态分割. 动态分割窗口通常用于创建同一个文档对应的多个视图,而且这些视图一般都是同一类型的视图,能够在用户编辑文档的不同部分时提供方便. 大家看下Word里的动态分割窗口就很明白了,以Word 2007文档为例,在菜单中点击“视图”->“拆分”,就可以看到一条随鼠标移动的分隔条,当我们在文档中某个位置按下鼠标左键时,分割条…
利用MFC创建窗口: 1.mfc的头文件:afxwin.h 2.自定义类,继承于CWinApp,应用程序类(app应用程序对象,有且仅有一个) 3.程序入口:Initinstance 4.在程序入口中创建窗口 5.窗口类继承于CFrameWind 6.窗口中构造Create(NULL,标题名称) 7.创建窗口对象 8.显示和更新 9.保存指向应用程序的主窗口的指针 10.return TRUE 11.对项目进行配置 消息映射机制 1.声明宏写到.h中 2.分界宏写到.cpp中 3.找消息宏 写到…
MFC中窗口启动后,CEdit编辑框默认光标位设置,顺序的调节方法 在编辑界面按下ctrl+D键,就会出现所有控件的Tab键顺序,按照自己想要的顺序依次点击控件,就可以重新安排顺序.数值1就是默认停留的光标位置.如果想把光标默认停留在2,则,先点数值1,然后点2,两个数值就交换位置了.————————————————版权声明:本文为CSDN博主「txwtech」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.ne…
很多玩游戏的人都知道一般游戏客户端程序是不允许双开的,就是说在同一游戏在启动的时候,是无法打开多个窗口.很多其他软件如酷狗播放器等也是这样.如果把打开的窗口最小化,这时重新启动程序,最小化的窗口会被显示,而不是重新开一个窗口.    今天突然想把我自己以前做的音乐播放器, 也加这么一个功能.查了点资料,主要用到了FindWindow这个函数.    原型如下: HWND FindWindow ( LPCSTR lpClassName, //输入窗口的类名,其实需要是注册过的类名才行,否则是要报错…
根据主窗口类型,MFC软件工程可以分为一下几种架构模型: 1.SDI(Simple Document Interface)单文档界面,一个主窗口下只编辑一份文档 2.MDI(Multiple Document Interface)多文档界面,一个主窗口下可以编辑多份文档 3.基于对话框的软件模型,主窗口是通过资源管理器,在对话框模版内摆放组件编辑而成,多用于开发小规模软件,如任务管理器 4.其他自定义窗口做主窗口,主窗口既不是框架也不是对话框,而是直接开发CWnd而成,如输入法,QQ,360卫士…
转载声明: 本文转载自:http://www.cnblogs.com/BeyondTechnology/archive/2011/03/25/1995934.html 感谢BeyondTechnology.. 在windows系统中,每个窗口对象都对应有一个数据结构,形成一个list链表.系统的窗口管理器通过这个list来获取窗口信息和管理每个窗口.这个数据结构中有四个数据用来构建list,即child.sibling.parent.owner四个域.所以我们可以看到,窗口之间的关系有两种:ow…
考虑单窗口情况: 假设自己通过new创建了一个窗口对象pWnd,然后pWnd->Create.则销毁窗口的调用次序: 1. 手工调用pWnd->DestroyWindow(): 2. DestroyWindow会发送WM_DESTROY: 3. WM_DESTROY对应的消息处理函数是OnDestroy(): 4. DestroyWindow会发送WM_NCDESTROY: 5. WM_NCDESTROY对应的消息处理函数是OnNcDestroy: 6. OnNcDestroy最后会调用Pos…
一.概念和区别 在windows系统中,每个窗口对象都对应有一个数据结构,形成一个list链表.系统的窗口管理器通过这个list来获取窗口信息和管理每个窗口.这个数据结构中有四个数据用来构建list,即child.sibling.parent.owner四个域.所以我们可以看到,窗口之间的关系有两种:owner-owned 关系和 parent-child关系.前者称之为拥有/被拥有关系,后者称之为父/子关系.在这篇文字中,我把owner窗口称之所有者窗口.换句话说,一个窗口在有一个父窗口(pa…
这篇讲得很清楚,就转过来了,原文如下: 因项目需要,最近在学习MFC,下午在一篇教程中提到了临时窗口.永久窗口,作者让读者自行查阅MSDN,了解临时窗口与永久窗口的概念,出于好奇,出于方便,直接百度一下,看到了几篇题为解释临时窗口与永久窗口的文章,随后网友在论坛中附上了MSDN中的原文,仔细翻译一下,发现网上查到的几篇文章,对这个概念的解释是有问题和不足的. 首先我要说明一点的就是窗口是没有临时与永久之分的,窗口是一种资源,随着CreateWindow的调用而产生,随着DestroyWindow…
工作中编写MFC界面程序时用到了停靠窗口,为了避免之后用到时再去查询,这里记录下. 步骤 1.定义一个继承自CDockablePane的类 Class CDockableTest : public CDockablePane{} 2.MainFrm.h中声明 CDockableTest m_dockableTest; 3.CMainFrame::OnCreate中创建 EnableAutoHidePanes(CBRS_ALIGN_ANY);//窗口自动停靠 m_dockableTest.Crea…
// special AFX window class name mangling #ifndef _UNICODE #define _UNICODE_SUFFIX #else #define _UNICODE_SUFFIX _T("u") #endif #ifndef _DEBUG #define _DEBUG_SUFFIX #else #define _DEBUG_SUFFIX _T("d") #endif #ifdef _AFXDLL #define _STA…
呵呵,最近在研究SendMessage函数,其中需要用到m_hWnd,之后延伸着又尝试获得窗口的句柄,于是遇到了FindWindow函数,原型如下: HWND FindWindow ( LPCSTR lpClassName,    //输入窗口的类名,其实需要是注册过的类名才行,否则是要报错或者查找失败的. LPCSTR lpWindowName, //输入窗口的名称,就是窗口上面蓝色的那行玩意儿写的字. ); 对于这个函数,如果按照窗口的名称查找,相信大家都非常简单,因为名称在rc文件里,是已…
搬家于CSDN 2015-05-14 MFC提供了三个函数用于窗口重绘 InvalidateRect(&Rect) Invalidate() UpdateWindow() 当需要更新或者重绘窗口时,一般系统会发出两个消息WM_PAINT(通知客户区有变化)和 WM_NCPAINT    (通知非客户区有变化) WM_NVPAINT    系统会自己搞定 WM_PAINT         消息系统默认对应的函数是OnPaint(),但‍一般在重绘时都在OnDraw,因为在ONPAIN中调用了OND…
默认情况下,MFC对话框的窗口类名为"#32770",如果想自定义窗口类名呢,需要两步: 1.修改rc文件 这一步需要直接编辑rc文件,使用任意记事本工具即可,找到窗口的相关定义,原来是这样子的: IDD_TESTMYWNDCLASS_DIALOG DIALOGEX 0, 0, 320, 200 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_APPWINDOW CA…
转自:http://blog.csdn.net/nuptboyzhb/article/details/7455471 源代码:http://download.csdn.net/detail/nuptboyzhb/4221531 CSplitterWnd类 CSplitterWnd类提供一个分隔器窗口的功能,分隔器窗口是一个包含有多个窗格的窗口.窗格通常是应用程序特定的由CView派生的对象,但它也可以是具有适当子窗口ID的任何CWnd对象. 一个CSplitterWnd对象通常被嵌入CFrame…
//在Onpaint函数中加入如下代码 //----------给窗口设置背景图片---------------------------- CPaintDC dc(this); CRect myrect; GetClientRect(&myrect); CDC dcMem; dcMem.CreateCompatibleDC(&dc); CBitmap bmpBackground; bmpBackground.LoadBitmap(IDB_BITMAP1); //IDB_BITMAP_TOO…
源代码:http://download.csdn.net/detail/nuptboyzhb/4221531 CSplitterWnd类 CSplitterWnd类提供一个分隔器窗口的功能,分隔器窗口是一个包含有多个窗格的窗口.窗格通常是应用程序特定的由CView派生的对象,但它也可以是具有适当子窗口ID的任何CWnd对象. 一个CSplitterWnd对象通常被嵌入CFrameWnd或CMDIChildWnd父对象.你应按如下步骤创建一个CSplitterWnd对象: 1. 在父框架中嵌入一个…
最近项目需要我们实现在两个窗口间进行通信,其中有个小功能如图所示: 当我点击GDIProgram中的Button1时,会更新Dialog的Radio1和Radio2的状态. Dialog中的Radio1和Radio2是一组单选按钮,Dialog中的Button1和Button2的单击事件都不会去更新Radio1和Radio2的状态. 当我执行以下操作步骤时 1)鼠标点击Radio1 2)点击GDIProgram中的Button1,此时会更新Dialog中单选按钮的状态,Radio2被选中 3)点…
原文链接: http://www.cnblogs.com/smartvessel/archive/2011/07/18/2109472.html 1. 在头文件stdafx.h中增加一个自定义消息宏 #define WM_USER_THREADEND WM_USER + 1 2. 在于增加新消息的窗口或对话框类的头文件中增加一个回调函数声明,注意要声明为public afx_msg LRESULT OnUserThreadend(WPARAM wParam, LPARAM lParam); 3.…
之前一直都是在学习C,但是没用MFC写过东西.所以这个算是MFC的一个处女作把. 今天硬着头皮写了个爆破工具,但是界面(edit控制)在显示的时候一下就被卡住了. 于是到处问人,后来有个不错的朋友帮我解决了,在此谢谢他. 没增加线程之前,老是会出现这样的问题,但是程序并不是死掉了,而是控件显示那儿给卡到了. 让哥们给加了一个线程函数,如下: void CTestmfcDlg::OnBnClickedButton1() { GetDlgItemText(IDC_EDIT2,url); GetDlg…
问题的由来: 最近在学习串口通信编程,参考的例子大多数都是在一个对话框中同时完成对串口的配置及数据收发的功能.这种方式不太适合于写自己的应用程序(会使得程序界面比较混乱,无法突出程序的重点),因此想让串口的参数配置在一个独立的对话框中进行设置,而后在主程序窗口实现串口通信的消息循环.这样就涉及到了两对话框数据的传递的问题.上网查阅了相关资料根据自己的使用需求和理解整理一番. 实现方法: class CDlg1: public CDialog { public: int x; …… } class…
目录 窗口静态分割 单个分割器 声明 准备视图 静态分割窗口&添加视图 使视图大小随窗口大小改变 多个分割器 声明 静态分割窗口&添加视图 使视图大小随窗口大小改变 视图切换 视图之间的切换 声明 修改相应函数 添加CMyView2和CMyView3的绘图代码 修改OnCreateClient函数 修改视图切换函数 子分割器之间的切换 声明 准备视图 修改相应函数 修改OnCreateClient函数 修改视图切换函数 篇尾声明 窗口静态分割 单个分割器 声明 首先在MainFrm.h中声…
Visual Studio写MFC应用程序,默认的程序左上角图标是自带的(如下图),想要自己个性化定制一个新的图标则需要以下几个步骤. 一.准备工作(icon图标) 首先准备一个自己个性化定制的图片,然后需要将图片转换成.ico格式.这里推荐一个快捷的小助手:https://www.bitbug.net/   可以快速生成一个小图标. 将生成好的图标放置在资源res路径下. 二.新建MFC工程 新建一个MFC应用程序,调到资源视图,会看到自带的icon如下图.资源的ID是IDR_MAINFRAM…
1.若是文档视图程序的话,在视图类的OnDraw(CDC* pDC)函数中调用pDC->TextOut()函数,就像平常输出文字一样.若是嫌文字的背景颜色破坏了图像,可以在输出文字之前调用pDC->SetBkMode(TRANSPARENT);2.若是在对话框应用程序中,就在对话框类的OnPaint()函数中创建一个局部对象CPaintDC dc(this);然后dc.TextOut()就行.若是嫌文字的背景颜色破坏了图像,可以在输出文字之前调用dc.SetBkMode(TRANSPARENT…