codersnote
这个作者很懒,什么都没留下…
展开
-
ini配置文件的读写
很多时候,我们的程序运行前需要用户做一些相关的设置,而且我们总是需要把一些配置信息保存下来,那天一直在思考怎么解决这个问题,突然就想到了在一些软件安装目录下的ini文件,然后经过查找资料发现其实ini文件既方便又实用。下面对其使用进行总结:一、将信息从ini文件中读取到变量中首先,看一个ini文件的示例。[连接参数]IpServer=127.0.0.1DataBase=DB_TESTUserID=testPassword=123456;注释用英文分号以上就是一个简单的配置文档。读取信息所原创 2021-04-21 08:28:22 · 837 阅读 · 0 评论 -
MFC无边框对话框实现拖动
解决无标题栏窗口的拖动问题有两种方案,一种方案是使用常规思路来处理鼠标拖拽事件,当窗口获得WM_LBUTTONDOWN(OnLButtonDown)时,通过设置标志并调用CWnd::SetCapture()函数来让当前窗口捕捉鼠标消息,应用程序进入移动模式,此时只要有WM_MOUSEMOVE消息过来,就可以据此移动框架窗口,最后当用户释放鼠标按钮,则WM_LBUTTONUP消息处理例程清除标志并调用CWnd::ReleaseCapture()函数将鼠标控制返还给Windows。这种方法比较繁琐,首先要决定原创 2021-04-24 19:06:50 · 713 阅读 · 0 评论 -
QT开发基础
QT中可以使用qmake来生成Makefile,由.pro文件生成Makefile的命令如下:qmake hello.pro -o Makefilemake模板(TEMPLATE)模板变量告诉qmake为这个应用程序生成哪种makefile。下面是可供使用的选择:app - 建立一个应用程序的makefile。这是默认值,所以如果模板没有被指定,这个将被使用。示例如下:TEMPLATE = applib - 建立一个库的makefilevcapp - 建立一个应用程序的Visual Stud原创 2021-12-29 17:09:32 · 537 阅读 · 0 评论 -
【MFC系列-第33天】链接控件自绘技术
33.1 常用的字体复制方法一CFont* pFont = pDC->GetCurrentFont();LOGFONT lf;pFont->GetLogFont(&lf);m_fontN.CreateFontIndirect(&lf);lf.lfUnderline = TRUE;m_fontT.CreateFontIndirect(&lf);方法二HFONT hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT原创 2021-12-22 08:35:16 · 97 阅读 · 0 评论 -
【MFC系列-第32天】控件自绘技术
32.1 对话框背景设置方法一BOOL CClDlg::OnEraseBkgnd(CDC* pDC){ CRect rect; GetClientRect(rect); pDC->FillSolidRect(rect, RGB(200, 255, 255)); return TRUE;}方法二:WM_CTRLCOLOR消息按类型按句柄按控件IDHBRUSH CMFCApplication1Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UI原创 2021-12-06 07:40:27 · 327 阅读 · 0 评论 -
【MFC系列-第25、26天】绘图软件
25.1 绘图软件的绘制原理纯虚函数:抽象函数,强制在派生类中进行实现;虚函数:有函数体,可在基类也可在派生类中实现。基类CLayerclass CLayer{//抽象类public: CLayer(); ~CLayer(); virtual void OnDraw(CDC* pDC) = 0; virtual void OnLButtonDown(UINT nFlags, CPoint point)=0; //纯虚函数,在派生类中具体实现 //virtual void OnLBut原创 2021-12-05 13:05:42 · 412 阅读 · 0 评论 -
【MFC系列-第24天】梯形分页和蝴蝶QQ宠物的实现
CDC(HDC)绘图类:五大GDI对象类:CPen,CBrush,CFont,CBitmap,CRgn24.1 梯形分页的双缓冲改进和尺寸自适应24.2 蝴蝶跟随鼠标点击运动class CHitFlyDlg : public CDialogEx{ CMemoryDC m_dc;//缓冲 enum { PAGE_COUNT = 7 }; CMemoryDC m_dcBack; CMemoryDC m_dcFly[PAGE_COUNT]; int m_nIndex; CPoint m_原创 2021-12-04 09:01:20 · 337 阅读 · 0 评论 -
【MFC系列-第23天】CMemoryDC的封装过程
CDC(HDC)绘图类:五大GDI对象类:CPen,CBrush,CFont,CBitmap,CRgn23.1 LoadImage APIHANDLE LoadImage( HINSTANCE hinst, LPCTSTR lpszName, UINT uType, int cxDesired, int cyDesired, UINT fuLoad );uType参数填写以下三种:IMAGE_BITMAP Loads a bitmap. IMAGE_CURSO原创 2021-11-30 08:28:32 · 526 阅读 · 0 评论 -
【MFC系列-第22天】GDI算法实战——过渡色
第22天 GDI算法实战CDC(HDC)绘图类:五大GDI对象类:CPen,CBrush,CFont,CBitmap,CRgn22.1 走马灯设置定时器SetTimer(1, 20, NULL);a)用窗口滚动来实现,一种思路 //pLamp->ScrollWindow(-2,0);// this ->ScrollWindow(-2, 0);正确代码:void ClampDlg::OnTimer(UINT_PTR nIDEvent){ CWnd* pLamp =原创 2021-11-29 11:11:32 · 429 阅读 · 0 评论 -
【MFC系列-第21天】GDI算法实战——过渡色
21.1 Caption过渡色实现// 方法一void CCaptionDlg::DrawColorTitle(CRect rect, COLORREF col1, COLORREF col2,CDC* pDC){ int cx = rect.Width(); int red = GetRValue(col2) - GetRValue(col1); int green = GetGValue(col2) - GetGValue(col1); int blue = GetBValue(col2原创 2021-11-28 09:13:32 · 140 阅读 · 0 评论 -
【MFC系列-第20天】CDC绘图类成员介绍
20.1 三大坐标系:屏幕、客户区和非客户区20.2 三大派生类:a)CPaintDC(客户区标准绘图),内部封装函数是:BeginPaint和EndPaintb)CClientDC(客户区非标准绘图),内部是:::GetDC和ReleaseDC(CWnd::GetDC的功能有写重复)和ReleaseDCCDC* pDC = this->GetDC(); // CWnd::GetDC(非静态)pDC->Ellipse(CRect(point.x-10,point.y-5,poin原创 2021-11-27 16:44:02 · 350 阅读 · 0 评论 -
【MFC系列-第19天】初步认识GDI绘图技术
WM_PAINT消息测试调试输出字符串OutputDebugSting(_T(“WM_PAINT-OnPaint\n”));1、WM_PAINT:功能和发生时间2、BeginPaint和EndPaint必须成对使用。a)BeginPaint返回的DC句柄,是基于关联的窗口客户区坐标系绘图b)MFC把这两个函数封装为一个类:CPaintDC类,防止BeginPaint和EndPaint不成对使用。3、CDC类和CDC派生类CDC类核心句柄就是m_hDC,他的绘图功能基本都是来自于m_hDC句原创 2021-11-26 07:42:54 · 161 阅读 · 0 评论 -
【MFC系列-第18天】企业信息管理软件开发
关注公号【逆向通信猿】更精彩!!!CWnd类中常用的成员函数函数名称含义static CWnd* PASCAL GetActiveWindow( )(进程内的)获取活动窗口CWnd* SetActiveWindow( )(进程内的)将一个窗口设置为活动窗口static CWnd* PASCAL GetForegroundWindow( )获取所有任务栏主窗口中最前端的窗口BOOL SetForegroundWindow( )将主窗口推到任务栏中所有窗口的最前原创 2021-11-25 08:20:20 · 184 阅读 · 0 评论 -
【MFC系列-第17天】企业信息管理软件开发
关注公号【逆向通信猿】更精彩!!!17.1 数值型关联变量:a)在MFC中有部分控件支持数值型关联变量:编辑控件、下拉控件、单选按钮、复选框以及日期控件;b)在类向导中为控件建立关联变量时,选中value类型;c)执行UpdateData(TRUE)将界面上输入的数据输入到对应的数值型关联变量中;执行UpdateData(FALSE)将数值型关联变量中的数据输出到对应的控件中;d)在基类的CDialog::OnInitDialog函数执行过程中,执行一次UpdateData(FALSE)输出原创 2021-11-24 09:02:09 · 710 阅读 · 0 评论 -
【MFC系列-第16天】企业信息管理软件开发
常见的两种类和类之间相互调用的方法。16.1 用户权限信息在不同对话框之间共享①在CWokerApp类中定义变量:class CWorkerApp : public CWinApp{public: CWorkerApp(); SAdmin m_admin;//登录信息// 重写public: virtual BOOL InitInstance();// 实现 DECLARE_MESSAGE_MAP()};②在CLoginDlg类中进行赋值BOOL CLoginDlg::Ch原创 2021-11-23 08:35:06 · 266 阅读 · 0 评论 -
【MFC系列-第15天】关联变量的概念与用法
15.1 权限管理对话框的信息录入与保存15.2 控件型关联变量:FromHandle和DeleteTempMap管理成员对象表,前者由HWND获取CWnd*,后者进行删除。BOOL Attach( HWND hWndNew ); //关联HWND Detach( ); //解除关联BOOL SubclassWindow( HWND hWnd ); //子类化HWND UnsubclassWindow( ); //反子类化BOOL SubclassDlgItem(UINT nID, CWn原创 2021-11-22 08:41:18 · 375 阅读 · 0 评论 -
【MFC系列-第14天】MFC核心类库的成员介绍(记事本快捷键)
14.1 对话框快捷键的设置和加载a) 插入一个新的Accelerator到资源里,把加速键和对应的响应控件(如一个按钮)关联b) 在对话框头文件中声明HACCEL m_hAccel;c) 在对话框的构造函数里初始化m_hAccelm_hAccel = ::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1));d) 然后重载对话框的PreTranslateMessage函数,在BOOL CAb原创 2021-11-21 08:55:31 · 249 阅读 · 0 评论 -
【MFC系列-第13天】Windows系统对话框(对话框记事本逻辑)
13.1 内存泄露问题真正的内存泄露是有循环性反复申请而不释放内存:是指在软件运行时,比如点一下某按钮就申请一次堆空间,而在下次申请前或者适当的时机及时释放内存;Detected memory leaks!Dumping objects ->{225} normal block at 0x006E9750, 92 bytes long.13.2 CFileDialog文件对话框GetPathName:获取选中的全路径文件名构造函数CFileDialog( BOOL bOpenFi原创 2021-11-20 15:46:14 · 633 阅读 · 0 评论 -
【MFC系列-第12天】Windows系统对话框
12.1 INI配置文件UINT GetProfileInt( LPCTSTR lpszSection, LPCTSTR lpszEntry, int nDefault ); 从应用程序的配置文件(.INI)的一个配置项中获取一个整数CString GetProfileString(LPCTSTR szSection, LPCTSTR szEntry, LPCTSTR szDefault = NULL ); 从应用程序的配置文件(.INI)的一个配置项中获取一个字符串BOOL WriteProfil原创 2021-11-19 08:21:25 · 112 阅读 · 0 评论 -
【MFC系列-第11天】CWinApp类成员分析
11.1 资源管理器开发(C语言)三种位运算//#include <AtlBase.h>//混合 c_file.attrib |= _A_HIDDEN|_A_RDONLY;//判断使用if(c_file.attrib & _A_HIDDEN) //删除属性c_file.attrib&=~_A_HIDDENT;11.2 资源管理器开发(API)全局变量的定义和初始化在ExplorerDlg.h中定义static LPCTSTR m_weeks[];在Ex原创 2021-11-18 08:42:47 · 452 阅读 · 0 评论 -
【MFC系列-第10天】非模式对话框开发
10.1 程序左上角图标设置通过SendMessage发送WM_SETICON消息来设置10.2 纯Win32程序开发和技巧(借助MFC源码)10.3 非模式对话框的调用a)调用CDialog::Create函数来创建,并且调用ShowWindow来显示;b)单例模式每次判断句柄存在就不重新创建,只要前端显示出来;c)多例模式每次在堆空间中申请一个新的对象,再执行Create函数;d)对话框属性设置中,如果打开Visible属性缺省就是可见(不用调用ShowWindow);e)在Cre原创 2021-11-17 08:11:24 · 516 阅读 · 0 评论 -
【MFC系列-第9天】MFC消息映射机制的原理
关注公号【逆向通信猿】更精彩!!!第9天 MFC消息映射机制的原理9.1 对话框常用的回调函数a)窗口创建时的消息和虚函数包括:WM_CREATE,WM_INITDIALOG,和PreSubclassWindow等;b)窗口关闭时的消息和虚函数:WM_CLOSE,WM_DESTROY以及OnOK和OnCancel等。c)有些消息是所有窗口都通用的,例如:WM_CREATE、WM_CLOSE和WM_DESTROY等。d)有些消息和虚函数是对话框专用的回调函数,例如:WM_INITDIALOG消原创 2021-11-16 08:01:36 · 210 阅读 · 0 评论 -
【MFC系列-第8天】小型软件项目开发
第8天 小型软件项目开发8.1 记事本开发小技巧:用VC6新建工程,以资源方式打开系统自带notepad.exe中的MENU资源,加入到自己新建的工程中;然后再添加到VS工程中,即可获取现有exe的菜单资源。EndDialog中传入的参数为DoModal的返回值;文件拖放打开:WM_DROPFILES消息// 获取拖入文件个数及文件名TCHAR sFile[256];int nCount = DragQueryFile(hDropInfo, -1, NULL, 0);int i = 0;w原创 2021-11-15 08:15:19 · 829 阅读 · 0 评论 -
【MFC系列-第7天】MFC类库封装原理
运算符重载operator RECT* (){ return this;}CString类库例1 CString str; int n = str.GetLength(); ::GetSystemDirectory(str.GetBuffer(1000), 1000); n = str.GetLength(); str.ReleaseBuffer();//必须配合GetBuffer来使用,修复字符串长度的功能 n = str.GetLength(); AfxMessageBox(原创 2021-11-14 20:24:05 · 683 阅读 · 0 评论 -
【MFC系列3】永远点不到的按钮
变量的声明与定义全局变量theApp的定义CXXXXApp theApp; // 定义在其他类中想要访问全局变量theApp时,需在stdafx.h中进行声明#include "XXXX.h"extern CXXXXApp theApp; // 声明三个被系统接管的消息(缺省,虚函数回调)WM_INITDIALOGWM_COMMAND:IDOK、IDCANCEL...原创 2021-11-09 08:28:43 · 153 阅读 · 0 评论 -
【MFC系列2】Win32项目转换为MFC项目
关注公号【逆向通信猿】更精彩!!!一、MFC的组成a)必须有一个CWinApp的派生类;b)必须用派生类在全局定义一个对象theApp;c)在派生类中必须重写InitInstance虚函数;d)MFC程序就用CWinApp派生类中的InitInstance虚函数作为主函数;二、MFC对话框程序的消息处理(消息映射机制)a)为一个对话框模板建立一个与之关联的CDialog或CDialogEx派生类;b)在需要启动对话框用派生类定义一个对象,在用对象调用DoModal成员函数;c)MFC如果要原创 2021-11-08 10:22:46 · 311 阅读 · 0 评论 -
【MFC系列1】之简单Win32程序
一、位运算标志位组合:wParam = MK_RBUTTON|MK_CONTROL|MK_SHIFT标志位的判断:if(wParam & MK_LBUTTON)标志位的分离:wParam &= ~MK_RBUTTON;WM二、调用约定__cdecl_stdcall是C Declaration的缩写(declaration,声明),表示C语言默认的函数调用方法是StandardCall的缩写,是C++的标准调用方式a)所有参数从右到左依次入栈a)所有参原创 2021-11-07 16:49:46 · 227 阅读 · 0 评论