摘要:rc和rc2都是资源文件,包含了应用程序中用到的所有的资源。两者不同在于:rc文件中的资源可以直接在VC集成环境中以可视化的方法进行编辑和修改;而rc2中的资源不能在VC的集成环境下直接进行编辑和修改, 而是由根据需要手工地进行编辑。 在下面的地址找到关于RC2文件的描述: http://msdn.microsoft.com/zh-cn/library/y3sk7e6b(VS.80).aspx RC2文件:包含项目使用的附加资源的脚本文件。可以在项目的 .rc 文件的顶部包括 .rc2 文件。 .rc2 文件用于存放由多个不同项目使用的资源。不必为不同的项目多次创建相同的资源,而是可以将它们.
阅读全文
随笔分类 - VC/MFC
摘要:应用程序事件日志中:“C:\windows\system32\test.exe”的激活上下文生成失败。 找不到从属程序集 Microsoft.VC80.MFC,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.762"。 请使用 sxstrace.exe 进行详细诊断。出现这类问题,是由于VC2005编译出来的程序文件,采用了manifest方式来指定dll文件。对于win98、
阅读全文
摘要:在用VC开发应用程序时,经常会要做一些可以改变大小的对话框,而这个时候就要求对话框上的控件会随着对话框大小的改变而改变自己的位置和大小。如果控件比较少,那可以在对话框的OnSize()事件里面添加代码,通过计算来调整各个控件的位置和大小;但是,如果对话框上的控件比较多的话,那这将是一件非常痛苦的事情!要是程序中又有很多可以改变大小的对话框,那一个一个的OnSize()写下来,那会使程序员崩溃的! 为了解决这个问题,我写了一个自动改变控件位置和大小的对话框类ClxDialog。从这个类继承的对话框类,只要在OnInitDialog()里对控件做一些简单的设置,对话框上的控件就会随着对话框大小的.
阅读全文
摘要:GetWindowRect是取得窗口在屏幕坐标系下的RECT坐标(包括客户区和非客户区),这样可以得到窗口的大小和相对屏幕左上角(0,0)的位置。 GetClientRect取得窗口客户区(不包括非客户区)在客户区坐标系下的RECT坐标,可以得到窗口的大小,而不能得到相对屏幕的位置,因为这个矩阵是在客户区坐标系下(相对于窗口客户区的左上角)的。 用GetClientRect返回的RECT结构上左为零, 右下分别对应客户区的宽度和高度; ScreenToClient把屏幕坐标系下的RECT坐标转换为客户区坐标系下的RECT坐标. 我们对同一个窗口先GetWindowRect取得一个...
阅读全文
摘要:VC下的界面着实难看 有时候我们不得不自己进行控件的绘制 以前 一直不理解最近再次看了学了一遍终于明白了一点 与大家分享下... 需要源代码的Q我 寻找一起学VC的朋友 比如说我们要改变一个编辑框的背景 我们响应WM_CTLCOLOR函数 进行OnCtlColor进行修改但是对与 Button控件就不行了 .. 这时候我们要进行自绘制 相关函数 virtual void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct ); 要覆盖掉这个虚函数 并且类型要设置为 BS_OWNERDRAW 这时候 放 应用程序进行初始化界面的时候 会进入我们的 Dra...
阅读全文
摘要:首先感谢大家对第一帖的支持,应一些网友烈要求下面我在关于上一贴的一些补充和说明(老鸟可以无视)这一贴是实战+理论不知道第一帖的先看第一帖:http://topic.csdn.net/u/20110710/19/5209f358-31c8-4057-b108-02155a417fd0.html1).补充个高级可重载函数PreSubclassWindow(),我的理解是允许用户在子类化之前再做一额外些处理 ,这个重载函数也是非常重要的,要引起相当的注意。可以在这里改变控件的大小,位置,窗口样式,字体 ,等等.....你能想到的能改的,都可以在这里改.2).关于Edit的补充说明:我最初的自绘方法是
阅读全文
摘要:前言:从这学期开始就一直在学习自绘控件(mfc),目标是做出一款播放器界面,主要是为了打好基础,因为我基础实在是很烂....说说我自己心得体会以及自绘控件的方法吧,算是吐槽吧,说的不对和不全的地方,或者有更好的方法,请不吝赐教。我的机器环境是:Windows7旗舰版 Service Pack 1,Visual studio 20051).重绘某个控件时,强烈推荐使用子类化方法,比如想自绘Button控件, 首先添加自己的类CMYButton 继承自 CButton ,声明一个CMYButton 对象,然后使用 SubclassDlgItem(UINT nID, CWnd* pParent );
阅读全文
摘要:1. 新建一个基于对话框的MFC程序。2. 在工程中添加一个新类CMyButton,基类选择CButton。3. 然后转至新生成的MyButton.h头文件中,将鼠标放在类名CMyButton上点击一下,打开“属性”窗口,在“消息”按钮下为此类添加 WM_LBUTTONDOWN,WM_LBUTTONUP消息,并重写DrawItem虚函数(这个函数是重绘按钮时要调用的,在这里面可以自定义一些绘制按钮的操作,必须设置控件属性为 OWNERDRAW才会调用此函数。)。4. 在MyButton.h头文件中添加一个BOOL型变量m_BtnDown,来判断按钮是否被按下,并在构造函数中初始化为false.
阅读全文
摘要:滑动条控制(Slider Control)也叫轨道条控制,其主要是用一个带有轨道和滑标的小窗口以及窗口上的刻度,来让用户选择一个离散数据或一个连续的数值区间。通过鼠标或键盘来进行数据的选择操作,这在WIN98/95中的很多应用程序中都可以看到,如控制面板中的鼠标等,滑动条既可以是水平方式的也可以是垂直方式的。滑动条控制的风格如下:TBS_HORZ 滑动条是水平方向的 TBS_VERT 滑动条是垂直方向的TBS_LEFT 滑动条位于窗口左侧 TBS_RIGHT 滑动条位于窗口右侧TBS_TOP 滑动条位于窗口顶部 TBS_BOTTOM 滑动条位于窗口底部TBS_BOTH 滑动条位于窗口两侧 TB
阅读全文
摘要:要想修改CButton类按钮背景颜色和文字颜色,必须利用自绘方法对按钮进行重新绘制。这可以通过定义一个以CButton为基类的新按钮类来实现。以下为具体的实现方法:方法一:加入一个新类,类名:CButtonEx,基类:CButton。在头文件 CButtonEx.h 中加入以下变量和函数定义:private: intm_Style; //按钮形状(0-正常,1-当前,2-按下,3-锁定) BOOLb_InRect; //鼠标进入标志 CStringm_strText; //按钮文字 COLORREFm_ForeColor; //文本颜色 COLORREFm_BackColor; /...
阅读全文
摘要:一、 综述 Mfc自带的 listctrl 虽然能够完成一些常用的操作,但是如果对于某些特定的应用,则无能为力,这时候,就学要对空间进行扩展,以实现满足特定需要的功能。本文阐述了如何实现具有自定义行高,而且能够选择和编辑的listctrl 控件。二、 实现(1) 实现自定义行高。 我们都知道,mfc 自带的 listctrl 控件的行高是固定的,不能够自定义的进行改变。如果设置一个比较大位图,或者简单的设置比较大号的字体,这些方法虽然能够改变行高,但是没有接触到问题的实质。我们使用消息反射机制来实现自定义行高。有关消息反射机制,请参见msdn 。实现自定义行高的listctrl 基于以下事实:
阅读全文
摘要:做“HOOK文件打开/保存对话框”的过程中,我首先研究了界面库的相关知识。界面库一般都是由C/C++这种中低级语言编码,这是因为在Windows下的界面库实现技术大都以直接操作控制Windows的消息和调用Windows的API为主,这就是这种中低级语言的优势了。无论何种界面库,最为根本的原理就是获得或者截获窗口的某些消息,按照自己的需要处理这些消息,画出自己需要的界面。按照Windows下的界面库的使用方法来分类,可以分为两种: 1、 通过派生、继承界面库中的类来使用库。这类界面库现在是占绝大多数。这类界面库通常可以对同种类型的控件、窗口自己控制显示风格。这种类型的界面库典型的代表就是Gui
阅读全文
摘要:关于普通菜单的自绘,网上的例子很多,做的都还不错,但系统菜单的自绘例子缺很少,主要使用的都是HOOK,以A Revolutionary New Approach to Custom Drawn Menus(http://www.codeproject.com/KB/menus/skinmenu.aspx)这篇文章为代表。这篇文章的作者主要使用贴图去掉菜单的默认颜色实现的(使用TransparentBlt就可以搞定所有菜单的自绘,当然还有一些细节问题),我曾经也使用了他的这种方法去实现系统菜单的自绘,发现效果并不是很理想,会有一些颜色去除的不干净,仔细观察的话,原作者提供的Demo中也存在这样的
阅读全文
摘要:为了实现菜单的自绘,花了我几个小时,其实真正解决后又发现很简单。实现菜单的自绘只需要三个步骤:第一步:将所有菜单项设置为MF_OWNERDRAW,即自绘模式第二步:在WM_MEASUREITEM消息中设置菜单项的大小第三步:在WM_DRAWITEM消息中进行菜单项的绘制问题首先出现在了第一步,我要绘制的是一个上下文菜单,即右键菜单,要将菜单项设置为MF_OWNERDRAW,需要用到ModifyMenu函数,起始由于ModifyMenu函数的参数设置错误,导致程序怎么也响应不了WM_MEASUREITEM和WM_DRAWITEM消息,所以建议在使用ModifyMenu时对返回值进行检查。void
阅读全文
摘要:VC中在listctrl中嵌入进度条,截图如下:其实要实现这个非常容易,以下是自绘ListCtrl的代码,首先继承CListCtrl,然后增加函数OnCustomDraw: void CProcessList::OnCustomDraw(NMHDR *pNMHDR, LRESULT *pResult) { //draw each item.set txt color,bkcolor.... NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR); // Take the default processing
阅读全文
摘要:1。先来介绍REPORT类型的CListCtrl:首先使用下面的语句设置CListCtrl的style: DWORD SetExtendedStyle( DWORD dwNewStyle );其中 LVS_EX_CHECKBOXES 表示添加CheckBox LVS_EX_FULLROWSELECT 表示选择整行 LVS_EX_GRIDLINES 表示添加表格线CListCtrl固定标题列宽:CHeaderCtrl* pHeaderCtrl = (CHeaderCtrl*)m_ListCtrl.GetHeaderCtrl(); pHeaderCtrl->EnableWindow...
阅读全文
摘要:子类化 如果你曾经在Windows环境下编过程序,有时候就会发现:有一个现成的窗口,几乎有你所需要的全部功能,但还不完全一样。如果你需要一个具有过滤特殊字符功能的Edit控件。当然最直接的方法就是自己用代码来实现,但这的确是一个费时又很困难的任务,而子类化就可以用来做这种事情。 子类化允许你接管被子类化的窗口,使你对它有绝对的控制权。举个例子了来阐明一下:例如你需要一个只接受十六进制数字输入的文本编辑框,如果使用一个简单的Edit控件,当用户输入十六进制以外的字符时,你既不知道也无计可施。也就是说,当用户进文本框中输入字符串"zb+q*"时,如果除了拒绝接受整个字符串以外几
阅读全文
摘要:MFC框架各部分指针获取方式:记住,是获取指针MFC消息流程图:string CString char* 的互相转换: string 转 CString CString.Format("%s", string.c_str()); //用c_str()比data()好 char 转 CString CString.Format("%s", char*); // 可以直接给CString赋值,不要用Format char* 转 string string s(char *); CString 转 string string s(CString.Get...
阅读全文
摘要:一:custom draw自行绘制 ClistCtrl 的列表项,可以利用列表框的 NM_CUSTOMDRAW 消息,该消息由控件向它的父窗口发送,告诉父窗口它的绘图操作。 如果绘图操作不需要父窗口参与,可以使用该控件的 ON_NOTIFY_REFLECT 宏处理它的 NM_CUSTOMDRAW 消息。 它的处理函数的参数中包含 NMHDR,在 CUSTOMDRAW 的通知下 NMHDR 可以被转换成为 NMLVCUSTOMDRAW 结构,该结构包含了列表控件中需要自绘区域的全部信息:typedef struct tagNMLVCUSTOMDRAW { NMCUSTOMDRAW nmcd; .
阅读全文
摘要:MFC 消息传递顺序LRESULT CALLBACK AfxWndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam){ // special message which identifies the window as using AfxWndProc if (nMsg == WM_QUERYAFXWNDPROC) return 1; // all other messages route through message map CWnd* pWnd = CWnd::FromHandlePermanent(hWnd); ASSERT
阅读全文