![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
VC++
文章平均质量分 84
qsycn
这个作者很懒,什么都没留下…
展开
-
MFC中设置静态文本的字体颜色、背景透明以及解决字体重叠
原创:qsycn改变static的颜色和设为背景透明可以在父窗口的WM_CTLCOLOR中实现(即HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor))将static设为背景透明时,改变该控件的文本将会出现文字重叠的现象。其实设置为透明背景也就是在static重画背景时返回一个空的刷子而已,所以你改变文本并没有改变上次残留的背景,从而导致重叠现象。为了解决这个问题,我们可以让父窗口重绘此区域。以下是我的解决方法:1. 从CStatic继承一个类CSt原创 2010-11-10 10:42:00 · 15105 阅读 · 12 评论 -
运行未安装VS2005的机器上C++程序
<br />1. 问题描述:<br /><br />最近在VS2005下用C++写了一个Console程序,在一台未安装VS2005的机器上不能正常运行。<br />用命令行方式运行,提示:<br />“系统无法执行指定的程序”<br />直接双击运行,提示:<br />“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题”<br /><br />用VC6和VS2003也有这个问题,只不过会提示说找不到“***.dll”,把需要的dll拷贝到目标机器就可以正常运行了。而VS200转载 2010-06-10 13:58:00 · 1172 阅读 · 0 评论 -
vc实现多语言资源
<br />用VC5.0实现:软件中的多种语言支持<br /><br /> MS Windows操作系统是一个世界上广泛使用的操作系统,对于不同语种的国家MS Windows有相应语种的版本。在不同语种的Windows平台上应该运行相应语种的应用程序。也就是说程序的用户界面(如菜单、对话框、状态条)中的提示文字应该使用和Windows操作系统所使用的语种一致。当然英语用户界面的程序可以运行在其它语言平台上,但比较复杂的程序或多或少都有问题,如对话框的尺寸不对,特殊的ASCII字符显示为文字,输入字符串可能转载 2010-06-07 15:09:00 · 1779 阅读 · 0 评论 -
枚举串口四法
串口作为最基本的电脑通信 I/O 接口,其使用虽然在 PC 上越来越少,但是在工业仪器领域仍然用的相当普遍,由于笔者工作中需要用到串口,而且发现枚举串口至今仍未搞得很清楚,为此自己先整理下,希望大侠和同行们对我不懂和错误的地方指点一下。 1 、查询注册表 查询注册表的方法是网上见到的比较常见的方法,该方法就是使用编程方法读取注册表内信息,相当于用户通过在运行框内输入 ”rege转载 2010-05-19 13:29:00 · 981 阅读 · 0 评论 -
VC——位图的透明显示
这里大部分内容摘自http://www.vckbase.com/document/viewdoc/?id=532 王俊的《透明位图的显示》。自己在看程序的过程中,遇到一些问题,所以进行少量的补充和说明。包含透明色的位图的绘制方法有多种,最简单的方法是调用现成的函数:TransparentBlt,也可以通过自己的代码实现类似TransparentBlt的功能,实现过程也有两种形式,一种是事先做一转载 2010-02-09 08:40:00 · 1810 阅读 · 0 评论 -
VC中使用ListCtrl经验总结
ListCtrl在工作中,常常用到,也常常看到大家发帖问怎么用这个控件,故总结了一下自己的使用经验,以供参考使用。先注明一下,这里,我们用m_listctrl来表示一个CListCtrl的类对象,然后这里我们的ListCtrl都是report形式,至于其他的如什么大图标,小图标的暂时不讲,毕竟report是大众话的使用。其次,我们这里用条款一,条款二来描述第一点,第二点,这个是参照《Effec转载 2009-12-08 15:56:00 · 669 阅读 · 0 评论 -
如何定位导致Crash的代码位置
------------------------------------------------------------------------------------------------------------------------[技术]如何定位导致Crash的代码位置 VeryCD-fengwen发于VeryCD电驴软件开发小组(http://www.VeryCD.com/gro原创 2010-01-27 14:58:00 · 1135 阅读 · 0 评论 -
CLR Debugger - 在程序抛出异常的时候中断程序的执行
1.1.1. 在程序抛出异常的时候中断程序的执行.NET对异常的良好支持,让我们摆脱了以前在C和C++程序开发过程中,那种不停的检查返回值的编程模式,使我们的程序变的更为简洁。异常不仅方便我们更高效的编写代码,同时也提供了一个好用的调试技巧—当然需要调试器的良好支持。在程序开发的过程中,可能会经常碰到这种情况,程序在运行很长时间后,突然抛出一个异常以后,转载 2010-01-27 09:57:00 · 845 阅读 · 0 评论 -
理解First Chance和Second Chance避免单步调试
在现在C++、Java、.Net代码大行其道的时候,很多代码错误(Bug)都是通过异常的形式表现出来的。由于工期紧或者种种原因,很多程序员在碰到程序发生未处理的异常的第一反应就是try … catch (Exception e) { … }。然而代码开发到后期的时候,这种简单粗暴的解决代码错误(Bug)的方式就会在其他不相干的地方表现出来,有的时候甚至导致程序随机的不稳定,而且很难调试。比如执行下转载 2010-01-27 09:55:00 · 1507 阅读 · 0 评论 -
在c++->code generation中的Runtime Library有以下几种选项
<br />在c++->code generation中的Runtime Library有以下几种选项/MD[d]/MT[d]/LD[d]<br />选项<br />说明<br />/MD<br />使应用程序使用运行时库的多线程并特定于 DLL 的版本。定义 _MT 和 _DLL,并使编译器将库名 MSVCRT.lib 放入 .obj 文件中。<br />用此选项编译的应用程序静态链接到 MSVCRT.lib。该库提供允许链接器解析外部引用的代码层。实际工作代码包含在 MSVCR90.DLL, 中转载 2010-06-12 11:57:00 · 3045 阅读 · 0 评论 -
MFC程序逆向-消息篇
<br />标 题: 【原创】MFC程序逆向 – 消息篇(上)+(下) 11楼<br />作 者: szdbg<br />时 间: 2007-10-31,06:26<br />链 接: http://bbs.pediy.com/showthread.php?t=54150<br /><br />前言:<br />记得前一段时间,我刚接触软件破解和逆向这一行时,对于一些软件不知从何处跟踪按钮消息,试了好多方法,就是断不下来,在系统模块中经常转得晕头转向,而一无所获。<br /><br />MFC程序是一种常见转载 2010-08-25 09:32:00 · 1281 阅读 · 0 评论 -
MFC多线程编程注意事项
1.工作线程给主线程发消息使用的是SendMessage和PoseMessage函数。这两个函数的区别在于SendMessage函数是阻塞方式,而PoseMessage函数是非阻塞方式。如果不是严格要求工作线程与主线程必须同步执行,则推荐使用PoseMessage。 2.不要在线程函数体内操作MFC控件,因为每个线程都有自己的线程模块状态映射表,在一个线程中操作另一个线程中创建的M转载 2012-09-12 14:35:50 · 957 阅读 · 0 评论 -
CFileDialog改变文件路径导致的一系列问题(如无法安全删除u盘、访问相对路径失败)的解决方法
原创:qsycn默认的CFileDialog选取文件的行为会改变当前路径解决方法就是不让CFileDialog改变当前路径在CFileDialog构造函数中explicit CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = N原创 2012-07-09 13:05:53 · 1294 阅读 · 0 评论 -
C++多线程面向对象解决方案
相信很多人都读过《C++沉思录》这本经典著作,在我艰难地读完整本书后,留给我印象最深的只有一句话::“用类表示概念,用类解决问题”。关于多线程编程,如果不是特别需要,大多数开发人员都不会特意去触碰这个似乎神秘的领域。如果在某些场合能正确并灵活地运用,多线程带来的好处是不言而喻的。然而,任何事物都有两面性,如果程序中引入多线程,那么我们需要谨慎小心地处理许多与之相关的问题,其中最突出的就是:资源转载 2012-04-26 09:45:01 · 744 阅读 · 0 评论 -
关于#pragma message(), #pragma comment()等编译开关的介绍
在#Pragma是预处理指令它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C ++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。其格式一般为: #Pragma Para其中Para 为参数,下面来看一些常用的参数。(1)message原创 2012-02-08 10:11:27 · 5967 阅读 · 0 评论 -
VS2008 sp1 菜单和工具栏修改了而显示却没有改变的解决方法
原因:默认情况下,当MFC应用程序退出时,在注册表中自动保存所有菜单以及工具条的状态(CWinAppEx::SaveState),并在启动时读取这些状态(CWinAppEx::LoadState)。解决方法:1. 彻底的方法重写虚函数CWinAppEx原创 2011-09-15 11:43:32 · 1556 阅读 · 0 评论 -
CArchive的版本控制功能
CArchive的版本控制功能1 引言Visual C++ 6.0语言开发环境在MFC中以CArchive类为中心提供输入输出的串行化和数据版本控制功能。一般来说,随着软件的升级,对应的输入输出也会发生改变,如何保证多个版本的软件与多种输入输出数据之间的亲和性转载 2011-08-04 16:33:43 · 748 阅读 · 0 评论 -
“应用程序配置不正确,程序无法启动”详细举例(vc2008 sp1)
<br /> http://hi.baidu.com/fairysky/blog/item/130dda13db7b050a5aaf53be.html<br />内容我就不copy了,大家可以自己去看,总来说产生这个问题的原因可以归结如下:<br />vc2005/vc2008采用了新的程序部署技术(manifest清单文件),manifest清单文件实际上类似于我们常用的makefile文件,它定义了程序运行的依赖关系(程序运行所需要的dll库的名称、版本等)。<br />程序运行,首先根据manifes转载 2011-05-31 14:34:00 · 1272 阅读 · 0 评论 -
FromHandle临时对象一探究竟
我们在调用CWnd::GetDlgItem()函数时,MSDN告诉我们:The returned pointer may be temporary and should not be stored for later use.中文意思就是:返回的指针可能是临时的并且最好不要保存起来放到以后用。猜测:返回的指针既然可能是临时的,那么可能是非临时的(永久的),最好不要保存起来放到以后用(有时候可以保存起来)源码面前,了无秘密。让我们深入MFC源代码去看个究竟。<br />先随便建立一个Dialog程序,然后在窗转载 2011-05-31 16:49:00 · 5086 阅读 · 0 评论 -
VC中一些手动发送消息的汇总
1. CTreeCtrl a. TVN_SELCHANGED ::SendMessage(::GetDlgItem(pView->m_pMainDlg->GetSafeHwnd(),IDC_TREE_PROGRAM), TVM_SELECTITEM,(WPARAM)TVGN_CARET,(LPARAM)hItem); 2. CComboBox a. ON_原创 2009-12-01 11:25:00 · 1284 阅读 · 0 评论 -
MFC中处理消息的顺序
MFC中处理消息的顺序1. AfxWndProc()接收消息,寻找消息所属的CWnd对象,然后调用AfxCallWndProc( )。2. AfxCallWndProc()存储消息(消息标识符和消息参数)供未来参考,然后调用WindowProc( )。3. WindowProc()发送消息给OnWndMsg( ),如果消息未被处理,则发送给DefWindo转载 2009-11-27 11:31:00 · 753 阅读 · 0 评论 -
VS2008在工具栏Toolbar里添加XP风格spin box control
Spin box control本是用于对话框中的控件。但有时需要将它放到工具栏上。VC++ 2008里实现如下:一、在工具栏上新增一个工具按钮项,资源命名为ID_TOOL_EDIT_TIME。再增加一个工具项,资源命名为ID_TOOL_INTEGRA_TIME。二、在工程里增加一个新MFC Class,base class选CToolBar,新类命名为CMainToolBar。原创 2009-11-26 09:10:00 · 3055 阅读 · 1 评论 -
谈GDI绘图中的资源释放
GDI绘图中经常会创建一些画刷、画笔和位图等资源,通常这些资源通过调用函数CreateSolidBrush、CreatePen、CreateCompatibleBitmap等方法创建。这些资源在使用完成以后必须通过调用DeleteObject()函数释放资源,否则会发生资源泄漏,最终导致系统资源被耗光,不能再次成功创建资源。考虑下面一段代码:HBITMAP hBmpLayer1,hBmpO转载 2009-09-22 13:50:00 · 1582 阅读 · 1 评论 -
VC++ Tab控件的背景色的处理
以VS2008为例 (1)默认tab风格为XP风格,属性中owner draw fixed = false 当tab页中加入static、check、radio、edit时会有 COLOR_BTNFACE背景色,样子比较难看 方法一:用位图作为背景http://www.codeproject.com/KB/wtl/ThemedDialog.aspx 方法二:创建原创 2009-09-11 11:26:00 · 7216 阅读 · 3 评论 -
VC增强Edit控件为日期输入控件
今天子类化edit控件碰到一个问题,子类化时在Attach中的断言错误 试出两个方法:第一:在OnInitDialog函数中的CDialog::OnInitDialog()前执行子类化过程m_meRemoteMac.SubclassDlgItem(IDC_MASKEDIT_RMAC, this); //m_meRemoteMac.SubclassWindow(GetDlgItem(原创 2009-09-08 17:38:00 · 1618 阅读 · 0 评论 -
获得实例的类名
const type_info& t = typeid(this); const char* className; className=t.name(); this 类必须有虚函数(The expression must point to a polymorphic type, that is, a class with virtual fun原创 2009-09-10 09:27:00 · 769 阅读 · 0 评论 -
VC++ Static标签实现背景透明!
在消息WM_CTLCOLOR中设定透明效果if(nCtlColor == CTLCOLOR_STATIC) //针对所有的标签{pDC->SetBkMode( TRANSPARENT );return (HBRUSH)::GetStockObject(NULL_BRUSH);}//////////////////////////////////////////////////////////转载 2009-09-10 15:35:00 · 1673 阅读 · 0 评论 -
C++ Unicode SBCS 函数对照表
因为项目碰到了国际化的问题,自己整理了一下, 主要是从tchar.h里面导出的包括类型和各类字符相关的处理函数,大部分都应该是用不到的。如果有想用自动化工具替换字符升级到unicode版本的,这个列表就比较全了。至于转换工具的替换规则,以后再发GenericSBCSUNICODETCHARcharwchar_t_TEOFEOF转载 2009-09-04 14:34:00 · 926 阅读 · 0 评论 -
工具条源代码剖析
/*****************************************************************//* 工具条研究手记(3)- 工具条源代码剖析 *//*****************************************************************/下面将通过研究工具条的源代码转载 2009-09-02 13:52:00 · 776 阅读 · 0 评论 -
CRichEditView或CRichEditVCtrl的资料
CRichEditViewCObject └CCmdTarget └CWnd └CView └CCtrlView └CRichEditView 一个“带格式编辑控件”是一个窗口,在这个窗口中用户可以输入和编辑文本。文本可以被赋予字母或段落的格式化,也可以包括嵌入的OLE对象。带格式编辑控件为格式化文本提供了设计界面。但是,应用程序必须实现需要的用户部件,以使格式化操作对用户来说可用。CRichE转载 2009-06-20 18:28:00 · 3069 阅读 · 0 评论 -
VC6.0编写层析软件移植到VS2003心得
今天下午突然想到要将原来在6.0上编的程序移植到2003上,开始始终跳出下面两行错误: 1。CJPagerCtrl.cpp(59) : error C2440: static_cast : cannot convert from BOOL (__thiscall CCJPagerCtrl::* )(NMPGSCROLL *,LRESULT *) to BOOL (__thiscall转载 2009-09-25 08:57:00 · 3050 阅读 · 0 评论 -
周边控件
上一讲我们与大家还是比较详细地介绍了编辑控件,其实我们也可以将编辑控件绑定一个整型变量,或者做一些其他的设置,而有一些控件就自然成了一种编辑控件的周边控件。什么意思呢? 例如旋钮控件,滚动条控件,等等,主要负责一些输入,而还有一些控件,如进度条控件等,主要负责一些输出。 甚至旋钮控件本身根本不需要去编程,只要在编辑框画出来之后,再画一个旋钮控件,然后设置一些属性就可以自动使用了,很是方便:转载 2009-11-13 15:45:00 · 749 阅读 · 0 评论 -
Richedit使用大全
很不错的源代码http://www.pudn.com/search_db.asp?keyword=MyRichEdit&x=36&y=16richedit 常见使用问题一.常见问题a.可以编译,不能执行的在需要在相应的对话框中加上InitInstance(void)函数中添加AfxInitRichEdit();b.升级默认的Riched版本(默认的有一些bug),如可在Ini转载 2009-11-10 12:41:00 · 5682 阅读 · 1 评论 -
读取其它进程richedit控件的内容
和Edit控件不同的是,Richedit支持RTF格式,采用WM_GETWINDOWTEXT消息只能得到文本信息,因此如果需要获取完整的RTF文件,则需要处理EM_STREAMOUT消息,将控件中的内容写出。有些控件对EM_STREAMOUT进行了过滤,则需要进一步处理EM_STREAMIN来在读入时截获原始数据。 处理的步骤如下:1、 获取目标Richedit窗口句柄;2转载 2009-11-09 16:01:00 · 2616 阅读 · 1 评论 -
SystemParametersInfo ( SPI_GETNONCLIENTMETRICS... 在VC 2008 里不能正常工作
NONCLIENTMETRICS ncms = {0} ;ncms.cbSize = sizeof(NONCLIENTMETRICS);int s = sizeof(NONCLIENTMETRICS);BOOL b = SystemParametersInfo (SPI_GETNONCLIENTMETRICS, (int)&s, &ncms, 0);DWORD dw = GetLas转载 2009-11-09 15:30:00 · 2530 阅读 · 2 评论 -
VC++深入详解 - 窗口的创建
1.4.2 窗口的创建创建一个完整的窗口,需要经过下面几个操作步骤: 设计一个窗口类; 注册窗口类; 创建窗口; 显示及更新窗口。下面的四个小分节将分别介绍创建窗口的过程。完整的例程请参见光盘中的例子代码Chapter1目录下WinMain。1.设计一个窗口类一个完整的窗口具有许多特征,包括光标(鼠标进入该窗口时的形状)、图标、背景色等。窗口的创建过程类似于汽车的转载 2009-10-29 13:15:00 · 3220 阅读 · 0 评论 -
CRectTracker类的使用方法及其静态库下CRectTracker无法显示鼠标光标解决方案
一 使用方法1 定义成员变量 CRectTracker m_RectTracker;2 构造函数设置样式 m_RectTracker.m_nStyle = CRectTracker::resizeOutside|CRectTracker::solidLine; m_RectTracker.m_nHandleSize = 6; m_RectTracker.m_转载 2009-10-27 14:38:00 · 1289 阅读 · 0 评论 -
Visual C++头文件互相包含的解决方案
现在我总结一下问题的解决过程和方法: 方法一:利用友元类我一共有两个类,由于要在两个类的头文件里互相应用对方,所以,在每一个类的头文件里面现包含另一个类的头文件,然后在该类的定义中声明另一个类为友元类。如下: #include "B.h" class CA: public CDialog { friend class CB; p转载 2009-09-28 14:50:00 · 1757 阅读 · 0 评论 -
工具条研究手记(3)- 工具条源代码剖析
/*****************************************************************//* 工具条研究手记(3)- 工具条源代码剖析 *//*****************************************************************/下面将通过研究工具条的源转载 2009-09-30 08:36:00 · 744 阅读 · 0 评论 -
VC中树形控件(CTreeCtrl)的使用
树形控件可以用于树形的结构,其中有一个根接点(Root)然后下面有许多子结点,而每个子结点上有允许有一个或多个或没有子结点。MFC中使用CTreeCtrl类来封装树形控件的各种操作。通过调用BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );创建一个窗口,dwStyle中可以使用以下一些树形控转载 2009-08-25 13:16:00 · 1088 阅读 · 0 评论