- 博客(85)
- 资源 (2)
- 收藏
- 关注
原创 MFC第三十天 通过CToolBar类开发文字工具栏和工具箱、GDI+边框填充以及基本图形的绘制方法、图形绘制过程的反色线模型和实色模型
a)文字工具栏开发:调用CToolBar::SetButtonText和CBoolBar::SetSizes方法;调用CToolBar::SetButtonStyle方法,为n个按钮一行做分行属性。b)工具箱创建时要指定:CBRS_SIZE_FIXED。CBRS_控制条属性。
2023-08-12 21:17:11
1203
原创 MFC第二十八天 WM_SIZE应用,CFrameWnd类LoadFrame的方法,PreCreateWindow窗口预处理,Frame-view窗口视图
a)CFrameWnd类偏爱WM_CREATE,因为所有的内部窗口都是代码创建的。而不像对话框是拖入的。b)CFrameWnd::rectDefault管理层叠c)LoadFrame内部包含CreateFrame,同时执行注册以及加载快捷键等(参见附录)
2023-08-06 11:05:16
869
原创 MFC第二十七天 通过动态链表实现游戏角色动态增加、WM_ERASEBKGND背景刷新的原理、RegisterClass注册窗口与框架程序开发
背景刷新的原理是在窗口绘制之前,系统首先向窗口发送WM_ERASEBKGND消息,窗口可以在处理此消息时进行背景擦除操作,即清除原有的背景后。系统会发送WM_PAINT消息,窗口可以在处理此消息时进行绘制操作,即绘制新的背景。通过以上流程,窗口可以在接收到WM_ERASEBKGND和WM_PAINT消息时分别进行背景擦除和绘制操作,实现背景的刷新。c)WM_ERASEBKGND消息对比WM_PAINT,是微软设计的前景和背景管理消息。b)WM_ERASEBKGND消息,是默认的背景输出管理消息。
2023-08-05 10:55:59
828
原创 双缓冲解决动画闪烁问题的原理
在MFC中,可以使用CDC类的相关函数来实现双缓冲,例如使用CDC的CreateCompatibleDC函数创建一个与屏幕兼容的内存DC,并使用CreateCompatibleBitmap函数创建一个与屏幕大小相同的位图作为缓冲区。然后,在绘制过程中,将所有的绘制操作都先在内存DC上进行,最后使用BitBlt函数将内存DC中的位图一次性地绘制到屏幕上。它的原理是通过在内存中创建一个与屏幕相同大小的位图,将所有的绘制操作先在位图上进行,然后再将位图一次性地绘制到屏幕上,从而避免了绘制过程中的闪烁。
2023-08-04 14:28:03
360
原创 MFC第二十六天 CRgn类简介与开发、封装CMemoryDC类并应用开发
CRgn类是MFC(Microsoft Foundation Classes)中的一个图形区域类。该类用于创建和操作图形区域,可以表示各种形状的区域,如矩形、椭圆、多边形等。public :// 封装的特点是没有使用Overload重载函数,结构体就是XXXIndirect CRgn();//创建矩形区域 BOOL CreateRectRgn(int x1 , int y1 , int x2 , int y2);
2023-08-03 17:03:06
1910
原创 C++术语
RAII(资源获取即初始化)是一种C++编程技术,用于管理资源的获取和释放。它基于C++的对象生命周期和析构函数的特性,通过在对象的构造函数中获取资源,在析构函数中释放资源,来确保资源的正确释放。RAII的核心思想是将资源的获取和释放绑定到对象的生命周期中。当对象被创建时,它会获取所需的资源;当对象被销毁时,它会自动释放资源。这样可以确保资源在任何情况下都会被正确释放,无论是正常的代码路径还是异常情况下。
2023-08-01 14:24:58
283
原创 lambda表达式
当我们需要在某个地方定义一个简短的函数对象,但又不想专门为其定义一个函数或者函数对象时,lambda表达式就非常有用了。它是一种可以在代码中直接定义并使用的匿名函数。下面是各个部分的解释:捕获列表(capture list):用于指定lambda函数体中需要访问的外部变量。捕获列表的形式可以是[][&][=][var][&var][=, &var]等。[]表示不捕获任何外部变量,[&]表示引用所有外部变量,[=]表示拷贝所有外部变量,[var]表示只捕获变量var,[&var]表示引用变量var,
2023-08-01 09:35:15
109
原创 CMake简介
编译器,是一个根据源代码生成机器码的程序。该命令会调用编译器程序g++,让他读取main.cpp中的字符串(称为源码),并根据C++标准生成相应的机器指令码,输出到a.out这个文件中,(称为可执行文件)。之后执行该命令,操作系统会读取刚刚生成的可执行文件,从而执行其中编译成机器码,调用系统提供的printf函数,并在终端显示出Hello, world。
2023-07-31 10:48:13
1215
原创 MFC第二十五天 位图加载与显示的方法,StretchBit位图拉伸、开发三态按钮类CBitmapButton的方法(WM_MOUSELEAVE鼠标悬停与离开判断)
/CPen,CBrush,CFont,CBitmap,CRgn,CPallette的共同基类。public :// 用来存储:HPEN HBRUSH HFONT HBITMAP ... operator HGDIOBJ() const;//内部就是API DeleteObject UINT GetObjectType() const;//内部是:m_hObject=GetStockObject;//生成外壳类 // Constructors CBitmap();
2023-07-29 20:44:07
567
原创 MFC第二十四天 使用GDI对象画笔和画刷来开发控件(分页控件选择态的算法分析、使用CToolTipCtrl开发动静态提示)
对于使用GDI绘图来实现按钮控件同时使用了CToolTipCtrl来实现动静态的提示文本
2023-07-28 15:17:47
1299
原创 MFC第二十三天 HBrush对闭合图形的填充、CPen、CFont类常用功能与LOGFONT和LOGPEN结构体
HBrush对闭合图形的填充、CPen、CFont类常用功能与LOGFONT和LOGPEN结构体
2023-07-28 14:04:08
952
原创 STL标准模板库 字符与字符串 string,string_view,const char *
主要对字符与字符串string,string_view,const char * 做出了相应的详解 可供大家参考
2023-07-28 11:54:22
152
原创 MFC第二十二天 三种绘图句柄与三大坐标系(三大CDC派生类)简介以及应用、Invalidate刷新函数的功能和用法简介
a)标准绘图消息WM_PAINT:,必须使用BeginPaint和EndPaint来绘图。BeginPaint和EndPaint只能在WM_PAINT中使用。b)在其他任何消息中使用的绘图句柄叫做临时绘图句柄。(GetDC和ReleaseDC)c)标准非客户户区绘图:(不推荐使用)GetWindowDC和ReleaseDC非客户区如同一个桌子的桌面,桌面上有桌布,露出了四角就是。这里要说明的问题是:非客户区不是只有四角。利用析构函数,无论任何条件返回,析构函数都系统帮你防止泄露。
2023-07-24 21:26:51
762
原创 MFC第二十一天 CS架构多页面开发与数据交互、CImageList图像列表介绍 、CListCtrl-SetItem设置列表项的方法
图像列表类支持内部有动态数组的控件 CComboBox CHeaderCtrl CListCtrl CTreeCtrl把图标做成一个列表创建空列表,指定每个元素的高宽。//指定带透明色的位图 BOOL Create(LPCTSTR lpszBitmapID , int cx , int nGrow , COLORREF crMask);
2023-07-24 11:49:03
945
原创 MFC第二十天 数值型关联变量 和单选按钮与复选框的开发应用
1、 数值型关联变量:a)控件型关联变量:针对于所有MFC工具箱中的控件都有效。b)数值型关联变量:有部分的控件支持数值型关联变量,大部分不支持。c)ListCtrl添加关联变量时,控件型的下拉是灰色的。d)只有可录入的控件才支持数值型关联变量。编辑框、下拉、日期,单选钮和多选框,另外ListBox可以关联。2、数值型关联变量的用法:a)CWnd::UpdateData :更新数据,可以认为集体输入输出函数。b)代入TRUE代表从界面输入到内存(类似于cin >>)
2023-07-24 10:17:14
690
原创 MFC第十九天 记事本项目功能完善和开发、CTabCtrl类与分页模式开发
CTabCtrl 用于创建和管理标签控件(Tab Control),也称为选项卡控件。//获取图像列表。//设置图像列表 // Retrieves the number of tabs in the tab control. int GetItemCount() const;获取当前选中 // Selects the specified tab in the tab control. int SetCurSel(_In_ int nItem);
2023-07-20 20:23:46
473
原创 __cdecl 和 __stdcall函数格式
_cdecl是CDeclaration的缩写(declaration,声明),表示C/C++和MFC程序默认使用的调用约定:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。被调用函数不会要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误。因此,实现可变参数的函数只能使用该调用约定。由于每一个使用__cdecl约定的函数都要包含清理堆栈的代码,所以产生的可执行文件大小会比较大。__cdecl可以写成_cdecl。
2023-07-18 11:19:50
123
原创 MFC第十八天 非模式对话框、对话框颜色管理、记事本项目(查找替换、文字和背景色、Goto(转到)功能的开发)
程序控制:在模态对话框中,对话框被关闭后会返回到调用它的代码处,可以根据对话框的返回值或状态进行相应的处理。而在非模态对话框中,对话框关闭后不会立即返回到调用它的代码处,需要通过消息处理机制来处理对话框的事件和状态。多任务处理:由于模态对话框阻塞了用户与应用程序的其他部分的交互,因此在处理耗时任务时可以使用模态对话框来防止用户对其他部分的操作。总的来说,模态对话框适合用于需要用户必须完成某个操作才能继续的情况,而非模态对话框适合用于需要用户可以同时进行其他操作的情况。
2023-07-18 11:05:18
1196
原创 MFC第十七天 CFont类与LOGFONT结构体(字体选择与注册表保存)、记事本文件打开和保存及是否保存的逻辑流程分析、PreTranslateMessage虚函数与快捷键
通过重写这个函数,我们可以实现对消息的拦截、修改和处理,从而实现一些高级的交互功能,比如处理键盘快捷键。a)我们经常看到消息被控件拐走了,所以好多消息包括:WM_MOUSEMOVE和WM_KEYDOWN等在消息都在主窗口不能用;c)如果你有字体信息结构体对象,调用CFont::CreateFontIndirect来在CFont对象中产生句柄。b)当然如果你做控件的派生类再进行子类化,是可以到控件类中去截获这些消息。CFontDialog是一个对话框类,用于显示字体选择对话框,并允许用户选择字体的样式。
2023-07-16 13:46:45
665
原创 MFC第十六天 CFileDialog、CEdit简介、(线程)进程的启动,以及Notepad的开发(托盘技术-->菜单功能)
GetPathName()是CFileDialog类的一个成员函数,用于获取用户选择的文件的完整路径名。当用户在打开或保存对话框中选择了一个文件后,可以通过调用GetPathName()函数来获取该文件的完整路径名。该函数的返回值是一个CString对象,包含了用户选择的文件的完整路径名。CEdit是MFC中的一个类,用于创建和操作单行或多行的文本框控件。CEdit类继承自CWnd类,并提供了一系列函数和属性来管理文本框的内容、样式和行为。提供用于打开或保存文件的标准对话框。提供用于选择颜色的标准对话框。
2023-07-14 09:52:37
2416
原创 STL标准模板库 set容器
set 作为模板类,其实有两个模板参数:set第一个 T 是容器内元素的类型,例如 int 或 string 等。第二个 CompT 定义了你想要的比较函子,set 内部会调用这个函数来决定怎么排序。如果 CompT 不指定,默认会直接用运算符 < 来比较。这里我们定义个 MyComp 作为比较函子,和默认的一样用 < 来比较,所以没有变化。} };return 0;这里我们把比较函子 MyComp 定义成只比较字符串第一个字符 a[0] < b[0]。
2023-07-13 22:15:28
288
原创 MFC补充第十四天 句柄嫁接与子类化
a)Attach和Detach就是单纯的嫁接b)子类化Subclass内部包含Attach,增强了消息转移机制。c)SubClassDlgItem简化了子类化功能,不需要反子类化UnsubclassWindowd)类向导中建立关联变量的方法(内部就是子类化)DDX_Control函数内的核心内容是,引用类成员变量m_xxx, {
2023-07-12 09:15:03
603
原创 MFC第十五天 HWND与CWnd对象之间的转换、CWnd类简介(补充)、员工管理系统登录界面眼睛捕获(补充)
HWND 与CWND 对象之间的转换,以及CWnd类的简介,对Setcapture捕捉函数以及相关函数进行介绍
2023-07-12 09:04:09
1384
原创 SendMessage和PostMessage有什么区别
同步与异步:SendMessage是同步函数,它会将消息发送给目标窗口,并等待窗口处理完消息后才返回。而PostMessage是异步函数,它会将消息放入目标窗口的消息队列中,然后立即返回,不会等待窗口处理完消息。返回值:SendMessage的返回值是目标窗口处理消息的结果,可以根据返回值来判断消息是否被窗口处理成功。总而言之,SendMessage函数会阻塞当前线程,直到目标窗口处理完消息,并且如果目标窗口与当前线程在同一个线程中,那么会直接调用窗口过程函数来处理消息,而不会经过消息队列。
2023-07-11 22:15:29
412
原创 MFC第十四天 BS_按钮属性与CButton类功能简介 、静态文本的穿透属性与显示密码开发、CS架构客户端的账号管理功能添加功能开发
/需要配合的尺寸 HICON GetIcon() const;位图句柄无效成员//对于单选和复选控件是有效的 void SetCheck(int nCheck);无效函数 // Overridables (for owner draw only) virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
2023-07-11 10:09:23
811
原创 工具快捷键
打开画图应用程序(Microsoft Paint):您可以在命令提示符中输入"mspaint",然后按回车键。打开命令提示符(Command Prompt):您可以按下Windows键+R,输入"cmd",然后按回车键。打开控制面板(Control Panel):您可以在命令提示符中输入"control",然后按回车键。打开记事本(Notepad):您可以在命令提示符中输入"notepad",然后按回车键。打开计算器(Calculator):您可以在命令提示符中输入"calc",然后按回车键。
2023-07-09 20:29:54
283
原创 MFC第十三天 CWND类 开发登录界面密码眼睛的设置
我们可以选择传递不同的参数来控制重绘的行为,例如指定一个矩形区域进行更新,或使用区域句柄来进行更新。如果密码字符为空,则将密码字符设置为_T(‘●’),即显示为圆点或其他字符。它可以用来强制窗口重绘,以更新窗口的外观和内容。SWP_NOSIZE :cx,cy无效,你随便带入任何数据保持高宽不动,否则高宽根据带入的数据变化。SWP_NOMOVE:x,y无效,你随便带入任何数据保持左上角不动,否则左上角根据带入的数据变化。它可以将一个指针类型转换为与之无关的另一种指针类型,或将指针转换为整数类型,反之亦然。
2023-07-09 09:41:07
756
原创 MFC第十二天 常用的Afx全局函数汇总、CWinApp类方法简介(注册表的读写与窗口位置记录和布局功能)
/历史上ID是字符串 HICON CWinApp :: LoadIcon(UINT nIDResource) const {} CWinApp :: LoadIcon内部封装API:LoadIcon(第一个参数代入theApp . m_hInstance,才可以加载资源试图中的图标资源)CWinApp :: LoadStandardIcon内部封装API:LoadIcon} 如果带入 NULL ,系统内的一些图标可以加载。
2023-06-29 11:04:06
1067
原创 MFC第十一天 CDialog类的三大虚函数简介 CS模式下员工管理系统项目插入列表数据的功能开发
如果需要自定义“确定”按钮的行为,可以在派生类中重写OnOK()函数,并在函数中添加自定义的处理逻辑。d)消息被控件拐走之后,主窗口没有收到消息,此时要继续截获控件消息就不得不建立控件派生类并子类化(SubClass).c)原本很多消息,包括WM_MOUSEMOVE和WM_DROPFILES等消息一旦进入控件区域,都会被控件拐走。e)MFC为了更方便地从主窗口管理控件内部的消息,把控件内的基础消息合成高级消息反射给主窗口。b)类向导第一页都是一些控件的ID,选择不同的ID就会列出对应控件的反射型消息。
2023-06-28 09:37:00
368
原创 MFC第十天 封装CTime时间类、CDialogEx类、CDialog类简介
动态创建对话框或者子对话框(分页) virtual BOOL Create(UINT nIDTemplate , CWnd * pParentWnd = NULL);public :弹出对话框 // support for passing on tab control - use 'PostMessage' if needed void NextDlgCtrl() const;向后 跳转焦点 void PrevDlgCtrl() const;
2023-06-26 22:41:26
889
原创 MFC第九天 CRect类的封装和窗口坐标系转换及获取窗口ID 以及对CTime类与COleDateTime类简介
CRect类的封装、窗口坐标系转换及获取窗口ID 、CTime类与COleDateTime类简介
2023-06-26 09:41:19
721
原创 MFC第八天 基本数据类型介绍
在图形绘制中,可以使用CPoint对象来表示图形的顶点坐标,通过操作CPoint对象的坐标属性可以方便地绘制各种图形。在窗口管理中,可以使用CPoint对象来表示窗口的位置,通过操作CPoint对象的坐标属性可以实现窗口的移动和调整。此外,CRect类还常用于窗口管理,可以通过CRect对象来设置窗口的位置和大小。它通常用于指定图形对象的尺寸、窗口的大小、位图的尺寸等。此外,CSize类还常用于窗口管理,可以通过CSize对象来设置窗口的大小或获取窗口的大小。它提供了方便的方法来操作矩形的位置和大小。
2023-06-25 10:35:39
555
原创 MFC第七天 单机版数据库增删改的方法和用户登录(密码修改)、权限管理功能的员工管理系统的应用 以及 CCombox类的属性和方法
a)窄字符串:typedef const char* LPCSTR;b)宽字符串:typedef const wchar_t* LPCWSTR;c)自适应字符串:typedef TCHAR* LPCTSTR;# endif全面对项目实施TCHAR类型:a)从常量上看:elseb)API:#else#endif //!UNICODEc)C语言库函数#else#endif。
2023-06-24 11:12:40
786
原创 MFC第六天 使用列表控件CListCtrl类开发一个基础版本的员工管理系统
CListCtrl是MFC中的一个控件类,用于显示列表数据。它继承自CWnd类,并提供了许多功能,如列标题、排序、多选等。下面是CListCtrl常用的函数方法和属性样式。CFile类是MFC中的一个文件操作类,提供了对文件的读写、查找、定位等操作.
2023-06-22 22:47:43
473
原创 MFC第五天 Unicode软件开发 MFC框架构成与封装类原理
如果字符的Unicode码值范围是U+10000至U+10FFFF(即65536~1114111),则使用四个字节表示,最高位为11110,第二高位为10,第三高位为10,第四高位为10。如果字符的Unicode码值范围是U+0800至U+FFFF(即2048~65535),则使用三个字节表示,最高位为1110,第二高位为10,第三高位为10。如果字符的Unicode码值范围是U+0080至U+07FF(即128~2047),则使用两个字节表示,最高位为110,第二高位为10。
2023-06-21 21:10:26
1519
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人