
mfc
youyudexiaowangzi
读书苦,读书累,晓来谁染霜林醉,名落孙山泪
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
windows去掉标题栏保留阴影
参考https://stackoverflow.com/questions/39731497/create-window-without-titlebar-with-resizable-border-and-without-bogus-6px-whit项目win32,不是控制台程序#include <Windows.h>#include <windowsx.h>#include <Dwmapi.h>#pragma comment(lib, "dwma原创 2020-08-02 15:22:48 · 2292 阅读 · 0 评论 -
MFC OnPaint中控件绘图,覆盖重叠的控件
对话框上又两个控件,一个static控件SS_BITMAP属性,用来绘图(canvas),一个static控件SS_BITMAP属性,用来显示图片(tool),tool和canvas有重叠部分,为了使canvas在刷新后不至于消失,我在OnPaint中采用双缓冲绘图方式刷新内容。可以刷新之后,tool与canvas重叠的部分变成canvas被覆盖的内容了,tool缺了一块。创建tool的时候指...原创 2018-10-31 15:56:30 · 1956 阅读 · 0 评论 -
CDialog中使用CView
resource中看不到view相关的控件,所以只能自己动态创建,看到网上的例子,照着写了,结果动不动就崩溃,好不容易调好了h文件#pragma once#include <afxwin.h>class HQ_ScrollView : public CView{ DECLARE_DYNCREATE(HQ_ScrollView)//这个重要,但是DECLARE_DY...原创 2018-10-30 21:37:36 · 922 阅读 · 0 评论 -
MFC UpdateLayeredWindow 以png作为窗口背景
头文件主要声明DECLARE_MESSAGE_MAP()VOID OnPaint();cpp文件#include <gdiplus.h>using namespace Gdiplus;BEGIN_MESSAGE_MAP(animateWindow, CDialog) ON_WM_PAINT()END_MESSAGE_MAP()void transp...原创 2018-11-06 18:59:11 · 848 阅读 · 0 评论 -
记录一个MFC继承自CStatic的绘图bug
MFC想要动态加载图片并不是一件容易的 事情,在主窗口中重绘图形也很不划算,所以一般采用继承控件,自定义绘画的方式,定义一个结构体,结构体中存放HQ_Image picture;发现gdiplus中的drawImage返回11,即ValueOverflow。不知道什么原因,但是结构体改为HQ_Image* picture;就没问题。HQ_Image*需要new ;采用的默认构造函数,HQ_Im...原创 2018-11-09 11:09:37 · 983 阅读 · 0 评论 -
MFC移除标题栏和边框
一般情况下MFC不设置标题栏就可以只有一个客户区了,但是左边和上边会有细线,仔细看看的话右边和下边也有浅一点的细线,这个时候设置WS_EX_CLIENTEDGE就能有作用了VOID myDialog::removeBorder(){ DWORD dw = ::GetWindowLong(GetSafeHwnd(), GWL_STYLE); dw = dw & ~WS_POPUP...原创 2018-11-09 11:55:34 · 572 阅读 · 0 评论 -
MFC CListCtrl显示图片
CListCtrl是列表控件CImageList是图片列表控件CListCtrl要想显示图片需要设置CImageList,关联之后,使用索引设置图片 CListCtrl *pList = new CListCtrl(); rect.left = 10; rect.top = 30; rect.right = clientRect.right - 10; rect.bottom...原创 2018-11-09 20:15:28 · 3688 阅读 · 3 评论 -
MFC透明控件
MFC控件本身不支持透明度,但是可以设置Rgn,于是可以通过带透明度图片,获取图片透明度,然后设置控件的不同位置的透明度,于是问题就回到如何获取图片的每个像素点的透明度,如下:void GetBKimageVisibleRgn(CString filepath, int width, int height, CRgn& Rgn){ //获取图片宽高 Bitmap *pimage...原创 2018-11-05 18:04:23 · 531 阅读 · 0 评论 -
C++ http请求
代码中使用TCHAR当参数是为了方便支持unicode和ansi,使用string当返回值是因为web返回的一般都是utf8字符,所以最好在加一个utf82gbk接口转换,可能还要加s2cs转cstring或者unicode。CommonLog是我自己的接口,可以忽略#include <WinInet.h>#pragma comment(lib, "Wininet.lib...原创 2018-11-14 20:09:02 · 2824 阅读 · 0 评论 -
QT调用动态库,执行MFC窗口功能
QT和MFC使用的不同框架,提供不同的接口,以前MFC已经完善部分功能,且已封装为库,代码还多,不想全部用QT重写,于是想用QT调用动态库,执行MFC部分功能1.导出函数#pragma once#ifdef MyDll_EXPORTS#define _MyDll_API __declspec(dllexport)#include <gdiplus.h>using ...原创 2018-11-29 11:36:09 · 3507 阅读 · 2 评论 -
Gdiplus drawimage 失败错误码11 ValueOverflow
mfc中使用gdiplus本来使用的挺好,今天继承CStatic得到子类myImage显示图片的时候发现画图的时候没反应,查看drawImage的返回值是11,表示ValueOverflow。myImage *p = new myImage();//没问题myImage p();//有问题调试发现drawImage时目标位置 rcDest.X = m_padding;...原创 2018-12-01 18:30:29 · 476 阅读 · 0 评论 -
MFC使用CScrollView
头文件class CourseSituationView : public CScrollView{ DECLARE_DYNCREATE(CourseSituationView)protected: //DECLARE_MESSAGE_MAP()//CDialog中调用CScrollView不知道为什么不响应message map,只能自己响应WiondowProcpublic:...原创 2018-12-03 10:38:57 · 1011 阅读 · 0 评论 -
MFC CListCtrl自绘单元格,设置行高
CListCtrlCListCtrl所在的对话框是代码创建,该对话框中动态创建了一个ClistCtrl的子类,结果不能响应消息WM_DRAWITEM,不能触发虚函数DrawItem.于是我在对话框(父窗口)messagemap中加入了 ON_WM_DRAWITEM() ON_WM_MEASUREITEM() ON_WM_MEASUREITEM_REFLECT()//...原创 2018-12-14 11:06:55 · 2884 阅读 · 10 评论 -
MFC GetParent返回NULL
今天用子窗口给父窗口发消息发现GetParent()返回NULL,查找了一下,发现是修改窗口样式的时候把WS_POPUP样式去掉了,其他可能情况应该还有Create的时候是否指定了Parent,是否添加了WS_CHILD样式...原创 2018-12-26 17:07:24 · 1114 阅读 · 0 评论 -
MFC自绘标题栏和边框
MFC窗口有标题栏和边框的时候,重绘不是很方便,在OnNcPaint中重绘标题栏如果调用基类的OnNcPaint,自己的后面的重绘都不生效,如果不调用基类的OnNcPaint,win10上的mfc程序出现了win7风格的边框,而且宽度还不能控制。移除边框DWORD dw = ::GetWindowLong(GetSafeHwnd(), GWL_STYLE);dw = dw & ...原创 2018-12-24 18:26:34 · 5693 阅读 · 8 评论 -
CListCtrl子类自绘GetColumn崩溃
今天自绘CListCtrl突然崩溃了,而且十分随机,随机的bug只能慢慢找了,改一点东西就测试几遍,慢慢定位到问题,发现是在GetColumn处崩溃了,看看MSDNpColumn地址LVCOLUMN结构,它指定要检索的信息并接收有关列的信息。 mask成员指定要检索的列属性。 如果mask成员指定 LVCF_TEXT 值pszText成员必须包含接收项文本的缓冲区的地址和cchTextMax...原创 2019-01-02 12:35:00 · 380 阅读 · 0 评论 -
MFC动态创建dialog,纯代码创建dialog
参考:https://www.cnblogs.com/lidabo/p/3447007.html大概思路:新增一个类,作为对话框模板DlgTemplate.h#pragma once#include "afx.h"#define DLG_TEMPLATE_BUFFER_MAX_LENGT 1024class CDlgTemplate{public: CDlgTempl...转载 2018-10-22 16:54:00 · 7078 阅读 · 0 评论 -
MFC图片上绘图,左键绘图,右键擦除
效果图:需求:窗口上显示图片,并可以在图片上画线,还可以擦除,擦除不影响图片显示,只擦除橡皮擦经过的部分设计:1.窗口显示图片2.画图3.显示绘图,并且不消失4.擦除自己作的图 代码:头文件 //用来显示图片 CImage ppt; //原始兼容DC,用来擦除时将原图部分覆盖到作图部分 CDC *pOrignMyDC; //显示DC,...原创 2018-09-20 16:59:08 · 2898 阅读 · 2 评论 -
error C2664: 'CWnd::FromHandle' : cannot convert parameter 1 from 'unsigned long' to 'HWND'
有的程序为了通用,会定义一个头文件,然后把各种类型重新定义一遍,在debug和release不同版本下可能结果不一样,但是debug版本会使用一些vc内的库,导致没装vc或vs的计算机不能运行,换成release版本后又可能有一些宏问题,比如有的宏针对于debug或者release导致版本交换后的错误如:error C2664: 'CWnd::FromHandle' : cannot原创 2015-02-03 15:56:31 · 1202 阅读 · 0 评论 -
mfc使用动态库中类的问题
编译动态库的时候,一般会生成静态库和动态库,可以像使用静态库一样#pragma comment(lib, xxxx.lib"),这样比typedef void(*FUN)();HMODULEhDLL = LoadLibrary("xxxx.dll");FUNfp1 = (FUN)GetProcAddress(hDLL,funName1); if(fp1 != NULL)原创 2015-04-22 17:42:04 · 779 阅读 · 0 评论 -
error PRJ0019: A tool returned an error code from "Performing Post-Build Event..."
当一个项目依赖某些动态库获取配置文件的时候,可以在property-->bulid event-->post-bulid-event中的command line中添加命令参数,如copy .\$(ConfigurationName)\$(ProjectName).exe ..\..\BinX32\$(ProjectName).exe,但是如果路径写错了,或者什么原因返回失败,可能会报e原创 2015-04-24 13:29:42 · 828 阅读 · 0 评论 -
mfc中stdafx.h
一般新建mfc工程都会生成stdafx.h头文件,这里面可以改,也可以包含工程所需头文件和库,每个源文件都需要包含stdafx.h,这样给别人使用的时候可能别人的工程根本就没有stdafx.h这个头文件,这样会报错,所以为了可以不用包含stdafx.h可以在工程属性中把预编译头文件设置为不包含。不然会报类似于unexpected end of file while looking fo原创 2015-04-24 13:07:13 · 1334 阅读 · 0 评论 -
Failed to save the updated manifest to the file
今天维护一个项目,试着编译了一下,感觉没改什么大的东西,但是报错:Failed to save the updated manifest to the file把现在的工程和原来的工程对照了一下,发现xxx.exe.intermediate.manifest文件不见了,虽然不知道是不是自己手误删的,但是看其他项目里面没有这个文件也可以通过,不明白为什么,把原来的清单文件加进去又好了原创 2015-04-29 11:48:36 · 649 阅读 · 0 评论 -
fatal error C1903: unable to recover from previous error(s); stopping compilation
遇到这种问题有时候是自己不小心导致的{}问题或者其他语法错误如果不是语法问题,那就得,考虑VC9的自身bug,微软官方有提供一种解决方法:在所在工程的属性里面进行如下设置property-->C\C++--> General -->Debug Information format ======= C7 Compatible (/Z7)C\C++--> Code Gene原创 2015-04-28 15:54:32 · 15449 阅读 · 0 评论 -
LINK : fatal error LNK1104: cannot open file 'xxx.exe'
自己编写的程序就是用来生成exe文件的,应该不会出现不能运行的情况,可是在任务管理器中一查看,发现好多同名的程序被挂起,这个时候结束掉那些同名的程序就可以了原创 2015-05-13 14:05:45 · 464 阅读 · 0 评论 -
windows程序头文件和库路径都没问题,还是报链接错误
得到头文件和库的时候直接包含到工程中,结果总是报连接错误,有符号不能识别,确定了包含方式和引用路径之后依然报错,这个时候修改了一个工程配置,(不是解决方案配置),如果得到的库是64位的就因该把工程配置为x64,property-->configuration manager-->配置为x64得到正确 匹配的工程后就正确了,原创 2015-05-13 13:54:26 · 608 阅读 · 0 评论 -
cannot convert parameter 1 from 'TCHAR [260]' to 'WCHAR *'
一般新建mfc程序默认是unicode编码,所以一般tchar就是wchar,报这种错是不应该的,但如果忘了设置或者设置为not use,或则多字节编码就会出现如上错误,这个时候最好在Character Set中确定Use Unicode Character Set原创 2015-05-13 14:04:41 · 813 阅读 · 0 评论 -
无法定位程序输入点 于动态链接库
好不容易把程序编译通过,又报"无法定位程序输入点 于动态链接库"错误,原来是库早就被更新了,但是自己没有更新导致运行时链接出错,这个时候把动态库更新为最新状态即可原创 2015-05-13 14:13:24 · 1892 阅读 · 2 评论 -
general error c1010070: Failed to load and parse the manifest. {_~0
今天维护一段别人的代码,编译报错:general error c1010070: Failed to load and parse the manifest. {_~0;毫无头绪,跟别的工程对照一下发现在属性-->Manifest Tool-->Input and Output中的Additional Manifest Files里面多了$(ProjectDir)\$(ProjectNam原创 2015-06-16 13:03:13 · 5832 阅读 · 0 评论 -
mfc创建线程
static UINT ThreadFunc(LPVOID pParam);//线程函数声明,必须声明为static函数UINT CTestApp::ThreadFunc(LPVOID pParam)//pParam为参数,void*,可以转化为任意类型的指针或者值{//线程函数实现}CWinThread *m_pThread; //线程指针m_pThread =原创 2015-09-08 09:34:13 · 483 阅读 · 0 评论 -
MFC的窗口create的时候指定父窗口,获取rect的时候却以桌面为坐标系
virtual BOOL Create( LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL );virtual BOOL Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );CDialog的create函数可以指定父窗口,但是如果此窗口的父窗口是程序中的另一个窗口原创 2015-09-15 15:51:43 · 1234 阅读 · 0 评论 -
mfc程序报错libcmt.lib(crt0.obj) : error LNK2019: unresolved external symbol main referenced in function
新创建一个mfc程序也没做什么,都是基础的编码,然后一编译,报错libcmt.lib(crt0.obj) : error LNK2019: unresolved external symbol main referenced in function __tmainCRTStartup,网上说是什么主函数入口的问题,试了之后发现没用,mfc程序理论上不会报main函数的问题啊,因为main函数已原创 2015-11-11 13:25:03 · 2021 阅读 · 0 评论 -
MFC SendMessage小bug记录
MFC发送自定义消息dlg.hafx_msg LRESULT test(WPARAM a, LPARAM b);dlg.cppBEGIN_MESSAGE_MAP(videoDialog, CDialogEx) ON_WM_SYSCOMMAND() //自定义消息 ON_MESSAGE(0x9878, test)END_MESSAGE_MAP()LRESUL...原创 2018-09-17 11:55:37 · 743 阅读 · 0 评论 -
mfc申请管理员权限
又是程序没有管理权限可能导致不能如期望那样运行,所以在运行时可能导致调用驱动或者内核的时候出现问题申请管理员权限需:属性-->链接器-->清单文件-->用户账户级别-->请求管理员权限。用英文表示就是(Property-->Linker-->Manifest file-->UAC execute level-->requireAdminstor)原创 2015-02-04 13:13:51 · 1348 阅读 · 0 评论