VC++
文章平均质量分 81
VC++学习
米酒馆
we(danglu0010)chat
展开
-
VC++菜单 菜单命令响应函数
菜单菜单栏、工具栏和状态栏是组成 Windows 程序图形界面的三个主要元素。大多数Windows应用程序都提供了菜单,作为用户与应用程序之间交互的一种途径。菜单命令响应函数首先,新建一个单文档类型的MFC 应用程序,项目名为Menu,解决方案名为ch07。然后编译并运行该程序,可以看到对于这个新建的程序来说,MFC已经帮我们创建了一个菜单,并完成了一些菜单功能。例如单击【文件】菜单下的【打开】菜单命令,即可弹出打开文件对话框。当用户单击某个菜单项时,程序中就会调用这个菜单项的命令响应函数,原创 2022-04-27 10:16:01 · 1418 阅读 · 0 评论 -
VC++设置字体 字幕变色功能的实现 DrawText函数 本章小结
目录设置字体字幕变色功能的实现DrawText函数本章小结接上:VC++字符输入 ASCII码接下:设置字体MFC提供了一个CFont类专门用来设置字体。这个类派生于CGdiObject类,封装了一个Windows图形设备接口(GDI)的字体。在实际编程时,在构造了一个CFont对象后,还必须利用该类提供的几个初始化函数之一对该对象进行初始化,然后才能使用这个对象。CFont类提供的初始化函数有:■ CreateFont■ CreateFontIndirect■原创 2022-04-26 18:16:25 · 2680 阅读 · 0 评论 -
VC++字符输入 ASCII码
字符输入下面要实现字符的输入功能,也就是当用户在键盘上按下某个字符按键后,要把该字符输出到程序窗口上。这就需要程序捕获键盘按下这一消息。之前曾介绍过WM_CHAR消息,这里,我们可以捕获这个消息,在该消息的响应函数中完成字符输出功能。但在字符输出时有一个问题需要注意,利用TextOut函数在窗口中输出字符时,需要提供字符显示位置的x坐标和y坐标,例如,我们打算在(0,0)位置处输出用户按键的字符,如果用户先后按下了“a”“b”“c”这三个字符,对于“a”字符,输出的位置是(0,0),紧接着我们要在“a”原创 2022-04-26 10:16:04 · 1559 阅读 · 0 评论 -
VC++路径
路径void CTextView::OnDraw(CDC* pDC){ CTextDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CString str; str = _T("风灵"); pDC->TextOut(100, 100, str); str.LoadString(IDS_STRINGVC); pDC -> TextOut(0, 200, str); // TODO: 在此处为本机数据添加绘制代码}在设原创 2022-04-25 12:47:50 · 603 阅读 · 0 评论 -
VC++窗口重绘 OnDraw函数 添加字符串资源
窗口重绘在Windows程序运行时,如果程序窗口大小发生变化,窗口会发生重绘,那么窗口中已输入的文字或图形就会被擦除掉。如果希望输入的内容始终保留在窗口上,就要在响应WM_PAINT消息的函数中将内容再次输出。在MFC应用程序向导产生的视类代码中,给我们提供了一个类似于WM_PAINT消息响应函数的OnDraw函数,当窗口发生重绘时,应用程序框架代码就会调用该函数。OnDraw函数在CTextView类中,OnDraw函数的定义如例所示。void CTextView::OnDraw(CDC原创 2022-04-25 08:43:56 · 3611 阅读 · 1 评论 -
VC++ 文本编程 插入符 创建图形插入符 CreateCaret函数
文本编程Word和记事本这类文本处理软件可以让我们输入文字,并对文字进行编辑和修改,将介绍与文字处理相关的编程操作。插入符常用的文本处理程序有Word、记事本和写字板,我们所使用的Visual Studio集成开发环境也可以看成是一个文本处理程序,在它的源代码编辑窗口中可以输入、编辑和修改代码。不难发现,在这些文本处理程序的编辑窗口中都有一条闪烁的竖线,称之为插入符(Caret)。插入符可以用于提示用户:你输入的文字信息将在这个插入符所在的位置显示出来。创建文本插入符在程序中想要创建原创 2022-04-24 19:16:00 · 1156 阅读 · 0 评论 -
VC++ 绘制连续线条 绘制扇形效果的线条
绘制连续线条Windows系统为我们提供了一个画图应用程序,在该程序中,利用画笔可以绘制连续的线条,下面我们就在Draw程序中实现这样的功能。为了绘制连续的线条,首先需要得到线条的起点,这在前面的内容已经实现了。然后需要捕获鼠标移动过程中的每一个点,这可以通过捕获鼠标移动消息(WM_MOUSEMOVE)来实现。在此消息响应函数中,在依次捕获到的各个点之间绘制一条条非常短的线段,从而就可以绘制出一条连续的线条。遵照这一思路,我们开始增加 Draw 程序的功能。首先为视类增加鼠标移动消息(WM_MO原创 2022-04-24 14:01:59 · 1072 阅读 · 0 评论 -
VC++使用画刷绘图 简单画刷 FillRect函数 位图画刷 透明画刷
目录使用画刷绘图简单画刷FillRect函数位图画刷透明画刷接上:VC++ 利用MFC的CWindowDC类实现画线功能 在桌面窗口中画线 绘制彩色线条 CPen nPenStyle nWidth crColor接下:使用画刷绘图MFC提供了一个CBrush类,可以用来创建画刷对象。画刷通常用来填充一块区域。简单画刷如下所示代码实现的功能是利用一个红色画刷填充鼠标拖曳过程中形成的一块矩形区域。void CDrawView::OnLButtonUp(UINT原创 2022-04-23 20:44:35 · 3356 阅读 · 0 评论 -
VC++ 利用MFC的CWindowDC类实现画线功能 在桌面窗口中画线 绘制彩色线条 CPen nPenStyle nWidth crColor
目录利用MFC的CWindowDC类实现画线功能在桌面窗口中画线绘制彩色线条CPennPenStylenWidthcrColor接上:VC++ 绘制线条 OnLButtonDown函数(DrawView.cpp) 利用SDK全局函数实现画线功能 利用MFC的CDC类实现画线功能 利用MFC的CClientDC类实现画线功能接下:利用MFC的CWindowDC类实现画线功能先介绍一个MFC类:CWindowDC,这个类也派生于CDC类,并且在构造时调用GetWind原创 2022-04-23 16:22:02 · 2863 阅读 · 1 评论 -
VC++ 绘制线条 OnLButtonDown函数(DrawView.cpp) 利用SDK全局函数实现画线功能 利用MFC的CDC类实现画线功能 利用MFC的CClientDC类实现画线功能
绘制线条了解了MFC的消息映射机制,下面我们就来完成画线功能。在先前创建的Draw项目中,可以看到消息响应函数OnLButtonDown有两个参数(如例5-2所示),其中第二个参数是CPoint类型,CPoint类表示一个点。也就是说,当按下鼠标左键时,鼠标单击处的坐标点已由此参数传递给 OnLButtonDown 这一消息响应函数。这样,我们所需要做的工作就是在此消息响应函数中保存该点的信息。为此,需要在视类中增加一个成员变量。给一个类增加成员变量可以通过在类视图中用鼠标右键单击该类,并从弹出的快捷菜原创 2022-04-23 14:19:09 · 4843 阅读 · 0 评论 -
VC++ OnWndMsg 函数(wincore.cpp)
目录OnWndMsg 函数(wincore.cpp)接上:接下:OnWndMsg 函数(wincore.cpp)BOOL CWnd::OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult){ LRESULT lResult = 0; union MessageMapFunctions mmf; mmf.pfn = 0; CInternalGlobalLock winMsgLock; //原创 2022-04-22 22:52:58 · 935 阅读 · 0 评论 -
VC++消息映射机制 WindowProc的函数(wincore.cpp)
目录消息映射机制WindowProc的函数(wincore.cpp)OnWndMsg 函数(wincore.cpp)OnWndMsg函数的处理过程是:接上:VC++ 类向导接下:消息映射机制可以浏览一下Draw项目CDrawView的头文件和源文件,可以发现在为视类增加一个鼠标左键按下这一消息响应函数之后,在文件中增加了三处代码。(1)消息响应函数原型在CDrawView类的头文件(DrawView.h)中,有如下所示代码。// 生成的消息映射函数protecte原创 2022-04-22 22:57:51 · 2956 阅读 · 5 评论 -
VC++ 类向导
目录类向导接上:VC++简单绘图 MFC消息映射机制 MessageBox函数接下:类向导介绍过如何使用类向导给某个类添加消息响应的处理函数,类向导是Visual C++开发中一个很重要的组成部分。它可以帮助我们创建一个新类,为已有类添加成员变量,添加消息和命令的响应函数,以及虚函数的重写。这里,我们再详细介绍一下类向导所具有的功能。类向导对话框如图所示。运行,单机左键:最右侧的“添加类”按钮用来向项目中添加一个新类,可选择四种类型的类进行添加,如图所示。类向导原创 2022-04-22 21:45:17 · 2078 阅读 · 0 评论 -
VC++简单绘图 MFC消息映射机制 MessageBox函数
简单绘图接下来将剖析MFC消息映射机制,探讨发送给窗口的消息是如何被MFC框架通过窗口句柄映射表和消息映射表来用窗口类的处理函数进行响应的。另外,还将讲述“类向导”这一工具的运用,讨论设备描述表及其封装类CDC的使用,以及CDC是如何与具体的设备发生关联的,并结合具体的画图程序进行分析。MFC消息映射机制首先介绍一些绘图方面的知识,从最简单的画线开始。在程序中画线和在纸上画线不太一样,在纸上画线时,我们只需用笔在纸上拖动一下就可以绘制出一条线,但在程序中画线时需要知道两个点,即线条的起点和终原创 2022-04-22 21:10:42 · 1040 阅读 · 0 评论 -
VC++ Button Styles Window Styles
目录Button Styles:Window Styles:接上:接下:You construct a CButton object in two steps. First, call the constructor and then call Create, which creates the Windows button control and attaches it to the CButton object.If the WS_VISIBLE style is given,原创 2022-04-22 14:56:40 · 341 阅读 · 0 评论 -
VC++在窗口中显示按钮 CButton::Create Button Styles Window Styles
为了更好地理解窗口类、窗口类对象和窗口之间的关系,接下来实现在窗口中显示一个按钮这一功能,在已有的Test程序(设为启动项目)中实现。首先需要创建一个按钮类对象,按钮对应的MFC类是CButton类,其继承层次结构如图所示,得知 CButton类派生于CWnd类。在MFC提供的资源类中,有些类的对象的构造(包括对象构造与初始化)直接通过其构造函数就可以完成。也就是说,这些对象的构造函数包含了这个对象的初始化操作。但有些对象的产生除了调用构造函数外,还需要调用其他一些函数来进行初始化的工作,然后才能使原创 2022-04-22 14:57:34 · 3684 阅读 · 0 评论 -
VC++窗口类、窗口类对象与窗口
MFC程序中的WinMain函数创建Win32应用程序进入 WinMain 函数、设计窗口类、注册窗口类、产生窗口、显示窗口、更新窗口,最后进入消息循环,将消息路由给窗口过程函数去处理。遵循这条主线,我们在写程序时就有了一条很清晰的脉络。...原创 2022-04-19 14:46:09 · 1313 阅读 · 0 评论 -
VC++ 窗口过程函数 MFC程序的整个运行机制
窗口过程函数现在已经进入了消息循环,那么 MFC 程序是否也把消息路由给一个窗口过程函数去处理呢?看看AfxEndDeferRegisterClass函数的源程序,其中有这样一句代码:连接:VC++MFC框架窗口(一)AfxEndDeferRegisterClass AfxRegisterClass PreCreateWindow AfxDeferRegisterClass wndcls.lpfnWndProc = DefWindowProc;这行代码的作用就是设置窗口过程函数,这原创 2022-04-16 22:52:16 · 1122 阅读 · 0 评论 -
VC++ 消息循环 Run函数 PumpMessage函数 AfxInternalPumpMessage函数
至此,注册窗口类、创建窗口、显示和更新窗口的工作都已完成,就该进入消息循环了。CWinThread类的Run函数就是完成消息循环这一任务的,该函数是在AfxWinMain函数中调用的,调用形式如下(位于 AfxWinMain函数实现代码处)所示。thrdcore.cpp:nResult = pThread->Run();AfxWinMain函数(winmain.cpp):连接:VC++MFC程序中的WinMain函数(四) AfxWinMain函数 AfxGetThread函数 .原创 2022-04-16 22:32:17 · 1204 阅读 · 0 评论 -
VC++MFC框架窗口(三)CreateEx 函数 Create函数 下载PDB文件
2.创建窗口按照Win32程序编写步骤,在设计窗口类并注册窗口类之后创建窗口。在MFC程序中,窗口的创建功能是由 CWnd 类的 CreateEx 函数实现的,该函数的声明位于afxwin.h文件中,具体代码如下所示。CreateEx 函数(afxwin.h)声明: // advanced creation (allows access to extended styles) // 高级创建(允许访问扩展样式) virtual BOOL CreateEx(DWORD dw..原创 2022-04-16 16:29:47 · 1554 阅读 · 0 评论 -
MFC框架窗口(二)AfxEndDeferRegisterClass 函数(wincore.cpp)
AfxEndDeferRegisterClass 函数:BOOL AFXAPI AfxEndDeferRegisterClass(LONG fToRegister){ // mask off all classes that are already registered AFX_MODULE_STATE* pModuleState = AfxGetModuleState(); fToRegister &= ~pModuleState->m_fRegisteredClasses;原创 2022-04-16 08:53:11 · 597 阅读 · 0 评论 -
VC++MFC框架窗口(一)AfxEndDeferRegisterClass AfxRegisterClass PreCreateWindow AfxDeferRegisterClass
MFC框架窗口有了 WinMain 函数,根据创建 Win32应用程序的步接下来设计窗口类和注册窗口类。MFC已经为我们预定义了一些默认的标准窗口类,只需要选择所需的窗口类,然后注册就可以了。窗口类的注册是由 AfxEndDeferRegisterClass 函数完成的,该函数的定义位于 wincore.cpp 文件中。其定义代码较长,由于篇幅所限,在这里仅列出部分代码,如例4-9所示。...原创 2022-04-16 12:48:33 · 677 阅读 · 0 评论 -
VC++MFC程序中的WinMain函数(五)InitInstance函数
目录前言:4.InitInstance函数(Test.h)InitInstance函数(Test.cpp)主 SDI 框架窗口:前言:pThread和pApp调用了三个函数(如下),这三个函数就完成了 Win32程序所需要的几个步骤:设计窗口类、注册窗口类、创建窗口、显示窗口、更新窗口、消息循环,以及窗口过程函数。 if (pApp != NULL && !pApp->InitApplication()) if (!pThread->Ini原创 2022-04-15 19:59:43 · 1361 阅读 · 0 评论 -
VC++MFC程序中的WinMain函数(四) AfxWinMain函数 AfxGetThread函数 AfxGetApp函数 afxCurrentWinApp函数
AfxWinMain函数当程序调用了CWinApp类的构造函数,并执行了CTestApp类的构造函数,且产生了theApp 对象之后,接下来就进入 WinMain 函数。根据如下所示代码,可以发现WinMain函数实际上是通过调用AfxWinMain函数来完成它的功能的。连接:VC++基于MFC的程序框架剖析(二)extern "C" int WINAPI_tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, _In_ LPTST原创 2022-04-15 18:42:54 · 2582 阅读 · 0 评论 -
VC++MFC程序中的WinMain函数(三)CWinApp类的定义(afxwin.h*)CWinThread类(afxwin.h)
目录CWinApp类的定义(afxwin.h*):接上:VC++基于MFC的程序框架剖析(二)CWinApp类的定义(afxwin.h*):class CWinApp : public CWinThread{ DECLARE_DYNAMIC(CWinApp)public:// Constructor explicit CWinApp(LPCTSTR lpszAppName = NULL); // app name defaults to EXE name// Att原创 2022-04-15 11:14:47 · 1217 阅读 · 0 评论 -
VC++文档/视类结构 InitInstance函数 帮助对话框类
CWinApp类的定义(afxwin.h*):class CWinApp : public CWinThread{ DECLARE_DYNAMIC(CWinApp)public:// Constructor explicit CWinApp(LPCTSTR lpszAppName = NULL); // app name defaults to EXE name// Attributes // Startup args (do not change) // This mo原创 2022-04-18 10:12:36 · 509 阅读 · 0 评论 -
VC++MFC程序中的WinMain函数(二)
为什么程序会首先调用CTestApp类的构造函数呢?原因:程序中定义了一个CTestApp类型的全局对象:theApp。提示: MFC程序的全局变量都放置在类视图窗口中的“全局函数和变量”分支下,单击该分支即可看到程序当前所有的全局函数和变量。双击某个全局变量,即可定位到该变量的定义处。CTestApp定义文件(Test.h):// CTestApp:// 有关此类的实现,请参阅 Test.cpp//class CTestApp : public CWinApp{p..原创 2022-04-15 11:13:42 · 1485 阅读 · 0 评论 -
VC++MFC程序中的WinMain函数(一)
创建Win32应用程序进入 WinMain 函数、设计窗口类、注册窗口类、产生窗口、显示窗口、更新窗口,最后进入消息循环,将消息路由给窗口过程函数去处理。遵循这条主线,我们在写程序时就有了一条很清晰的脉络。...原创 2022-04-14 14:55:21 · 2520 阅读 · 0 评论 -
VC++基于MFC的程序框架剖析(前言)
基于MFC的程序框架剖析MFC库是开发Windows应用程序的C++接口。MFC提供了面向对象的框架,程序开发人员可以基于这一框架开发Windows应用程序。MFC采用面向对象设计,将大部分的Windows API封装到C++类中,以类成员函数的形式提供给程序开发人员调用。下面看一下MFC应用程序向导帮助生成的这些代码:单击Visual Studio菜单栏上的【视图】菜单,单击【类视图】菜单项,这将打开类视图子窗口,方便查看项目中的类组织结构。在“类视图”中展开Test根节点,可以看到项目原创 2022-04-13 21:08:09 · 1631 阅读 · 1 评论 -
VC++MFC应用程序向导
MFC(Microsoft Foundation Class,微软基础类库)是微软为了简化程序员的开发工作所开发的一套C++类的集合,是一套面向对象的函数库,以类的方式提供给用户使用。原创 2022-04-13 20:35:32 · 2049 阅读 · 0 评论 -
VC++关于WinMain程序的学习笔记(2)
WinMain函数如下:#include <windows.h>#include <stdio.h> //消息是由MSG结构体来表示的。LRESULT CALLBACK WinSunProc( HWND hwnd, // handle to window表示消息所属的窗口 UINT uMsg, // message identifier指定了消息的标识符 WPARAM wParam, // first message parameter指定消息的附原创 2022-04-13 14:51:18 · 2058 阅读 · 3 评论 -
VC++关于WinMain程序的学习笔记(1)
WinMain函数如下:#include <windows.h>#include <stdio.h> //消息是由MSG结构体来表示的。LRESULT CALLBACK WinSunProc( HWND hwnd, // handle to window表示消息所属的窗口 UINT uMsg, // message identifier指定了消息的标识符 WPARAM wParam, // first message parameter指定消息的原创 2022-04-12 23:13:39 · 958 阅读 · 0 评论 -
VC++第一章
目录第1章 准备开发环境1.1 下载并安装Visual Studio 20171.2 运行第一个程序——Hello World1.3 安装离线MSDN1.4 小结第1章 准备开发环境1.1 下载并安装Visual Studio 2017下载Visual Studio的网址,现在VS已经更新到2022了哦:下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux在如下页面:勾选“使用C++的桌面开发”,同时在右边的“安装详.原创 2022-03-18 10:37:51 · 1187 阅读 · 1 评论