摘要:MFC库里没有符合这个条件的控件,于是我自己写了一个,初步测试有效。注:可以设置透明背景,但还不能做到透明度设置(如50%透明度) 如果设置了背景色,就不保留透明背景 默认背景色是透明的[cpp]view plaincopy//设置背景色(若clr为CLR_NONE,则背景透明)voidSetBackgroundColor(COLORREFclr){m_clrBackground=clr;}//设置文字前景色voidSetTextColor(COLORREFclr){m_clrText=clr;}//设置文字字体voidSetFont(CStringstrFaceName,LONG...
阅读全文
随笔分类 - VC/MFC
摘要:非模态对话框需要重载OnCanel方法, 并调用DestroyWindow, 且不能调用基类的OnCanel重载PostNcDestroy, 需要delete掉this指针// Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CDlgTest) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support virtual void PostNcDestroy(); //}}AFX_VIRTUA
阅读全文
摘要:本文示例源代码下载 CGridCtrl_demo19_01.zip为演示CGridCtrl的使用 CGridCtrl_demo19_02.zip演示与CMYODBC的配合使用 一、引言 在用vc开发关于数据库的项目时,通常我们只好用微软的DBGRID作为数据库表格控件,其实微软的DBGRID并不好用,想找一份好的帮助文档都找不到,并且界面并不友好,比起C++Builder中的DBGRID来说是逊色不少,但是DBGRID在开发数据库的项目中又是常用的控件,所以就一直想找一个好用的DBGRID,可是网上又没有找到。上次在无意中看到了CGridCtrl(一个很漂亮的表格控件,如果你还没有用过...
阅读全文
摘要:当前许多应用程序都在使用树型控件时为其添加了背景位图,增强的控件的魅力,然而对于Visual C++编程爱好者来说,使用Visual C++MFC提供的树型控件(CTreeCtrl)本身就是一个难点,至于如何使该控件能够带有背景位图,那就更加是一个令人困惑的问题了。本实例对CTreeCtrl类进行了增强,不仅使它带有背景位图,而且解决了在点击树型控件时背景位图闪动的问题,另外,通过在对话框中使用该控件来显示三级目录,演示了树型控件的基本使用方法。下图为程序编译后的运行效果图: 图一、带背景图的树型控件效果图 一、实现方法 在实现树型控件的背景位图之前,我们首先介绍一下树型控件的基本...
阅读全文
摘要:k_eckel:http://www.mscenter.edu.cn/blog/k_eckel文档视图结构(Document/View Architecture)是MFC的精髓,也是Observer模式的具体实现框架之一,Document/View Architecture通过将数据和其表示分开,提供了很好的数据层次和表现层次的解耦。然而,虽然我们使用MFC AppWizard就可以很轻松地获得一个支持Document/View Architecture的MFC程序框架,Document/View Architecture本身的复杂性加上VC产生的一系列代码足够让我们眼花缭乱,一时陷入云里雾里
阅读全文
摘要:参考文章:http://tech.sina.com.cn/s/2006-07-25/09051053460.shtml响应WM_NCHITTEST消息函数实现如下://////////////////// Non-client hit-test handler to move window by its client area.// If the user clicks anywhere on the client area, pretend it's the// caption. Windows does the rest!UINT CMyDialog::OnNcHitTest(CP
阅读全文
摘要:MFC对话框屏蔽Enter和ESC键参考:http://www.docin.com/p-122354833.html方法一重载PreTranslateMessage函数 BOOL CXXDlg::PreTranslateMessage(MSG* pMsg){ //对话框屏蔽Enter和ESC键 if (WM_KEYDOWN == pMsg->message) { if ( (VK_RETURN == pMsg->wParam) || (VK_ESCAPE == pMsg->wParam)) { return TRUE; } } return CBCGP...
阅读全文
摘要:实现CSliderCtrl的子类CXXCtrl响应左键按下消息ON_WM_LBUTTONDOWN()void CXXCtrl::OnLButtonDown(UINT nFlags, CPoint point){ // 按键在滑动块区域内,不做操作 CRect tRect; GetThumbRect(&tRect); if (tRect.PtInRect(point)) { CSliderCtrl::OnLButtonDown(nFlags, point); return; } // 实现滑动块精确定位 CRect rcSlider; GetChannelRec...
阅读全文
摘要:在MFC使用过程中,遇到DLL资源与主EXE资源冲突问题。出现这样的Bug,一时无从下手。报错位置在核心代码中dlgcore.cpp。[cpp]view plaincopy BOOLAFXAPI_AfxCheckDialogTemplate(LPCTSTRlpszResource,BOOLbInvisibleChild){ASSERT(lpszResource!=NULL);HINSTANCEhInst=AfxFindResourceHandle(lpszResource,RT_DIALOG);HRSRChResource=::FindResource(hInst,lpszResource,R
阅读全文
摘要:类似QQ与360软件,消息提示有两种。上下浮动、渐入渐出。1、上下浮动提示框实现机制,定时器响应上下浮动消息。主要API:MoveWindow。源码如下UpDownTipDlg.h、UpDownTipDlg.cpp。UpDownTipDlg.h[cpp]view plaincopy /**@brief上下浮动提示框*@date2012-8-9*/#pragmaonce//CUpDownTipDlgdialogclassCUpDownTipDlg:publicCDialog{DECLARE_DYNAMIC(CUpDownTipDlg)public:CUpDownTipDlg(CWnd*pPare
阅读全文
摘要:类似360消息弹出框,实现方式一见http://blog.csdn.net/segen_jaa/article/details/7848598。本文采用另外的API实现渐入渐出效果。主要API:SetLayeredWindowAttributes。实现功能:采用管理器控制消息框每次只显示一个。消息框独立显示在右下角,不随主窗口放大缩小变化。鼠标进入消息框区域,渐入渐出效果停止。1、消息框实现创建对话框类CMsgTipDlg,设置对话框属性。Tool Window:true。设置对话框为消息框,任务栏上将没有图标。Topmost:true。设置对话框置顶。MsgTipDlg.h。[cpp]vie
阅读全文
摘要:在MFC程序设计的学习过程中最令人感到难受,甚至于有时会动摇学习者信心的就是一种对于程序的一切细节都没有控制权的感觉。这种感觉来源于学习者不知道一个MFC程序是如何运行起来的(即一个MFC程序的执行流程)和MFC程序的设计思想和机制,即使是写过Windows程序的学习者,也会感到非常迷惘并且无从下手。而这种感觉的出现会使大家认为自己离开了书本上的例子就无法设计编制程序。下面我就来说一说一个MFC具体是如何被执行的。在阅读本文之前,你要有一定的Windows程序设计基础,知道Windows程序的运行流程,如不清楚,可先看看我写的这篇文章——解说一个简单的Win32程序。 一、单文档项目特点简述以
阅读全文
摘要:今天刚刚做了一个静态链接到MFC的规则dll,即“Use MFC in a static library“,该dll用来显示一个窗体。然后在一个mfc可执行程序A.exe中调用这个dll文件,可以正常的显示窗体。但后来做了一点小小的改动,即把dll改成动态连接到MFC的dll,即“Use MFC in a shared dll ”,然后在A.exe中调用该dll,结果窗体怎么都不显示。后 共有三种方法: 1. 在dll中自动切换,在dll的显示窗体的接口函数中使用AFX_MANAGE_STATE(AfxGetStaticModuleState()),如下: void ShowDlg(vo...
阅读全文
摘要:面我们来介绍如何访问动态链接库中的C++类和资源。其具体操作步骤如下:(1)创建一个基于对话框的工程,工程名称为“AccessDll”。设计对话框资源如图1所示。图1 对话框资源设计窗口(2)定义一个名称为CTextDlg的抽象类,因为需要访问动态链接库中的CTextDlg类,因此客户端需要定义一个框架,即抽象类CTextDlg。class CTextDlg//定义抽象类CTextDlg{public:virtual void __stdcall ShowTextDlg(char* pchText) = 0;//定义纯虚方法};(3)定义两个函数指针,用于关联动态链接库中的全局函数。typed
阅读全文
摘要:近来在论坛上很有多帖子问到如何使用DLL中的资源(包括对话框,图标等)的问题,现在笔者就来就此问题谈谈,包含在DLL内部使用资源,DLL中使用其它DLL中的资源和在应用程序中使用资源。 我们先以图标为例说起(其它的资源与此图标的加载原理大致相同),我们要加载图标,一般是调用AfxGetApp()->LoadIcon(…);下面是CWinApp::LoadIcon的实现(afxwin2.inl):_AFXWIN_INLINE HICON CWinApp::LoadIcon(LPCTSTR lpszResourceName) const{ return ::LoadIcon(AfxFindR
阅读全文
摘要:(本文尝试通过一些简单的实验,来分析Windows的窗口机制,并对微软的设计理由进行一定的猜测,需要读者具备C++、Windows编程及MFC经验,还得有一定动手能力。文中可能出现一些术语不统一的现象,比如“子窗口”,有时候我写作“child window”,有时候写作“child”,我想应该不会有太大影响,文章太长,不一一更正了)问题开始于我的最近的一次开发经历,我打算把程序的一部分界面放在DLL中,而这部分界面又需要使用到Tooltip,但DLL中的虚函数PreTranslateMessage无法被调用到,原因大家可以在网上搜索一下,这并不是我这篇文章要讲的。PreTranslateMes
阅读全文
摘要:一、parent:创建者,owner:所有者小玉的父母生下小玉,养到8岁,卖给贾府当丫头小玉的父母是parent,贾府是owner二、1.Pop-up窗口:一个弹出窗口是必须具有WS_POPUP属性的窗口,弹出窗口只能是一个Top-Level窗口,不能是子窗口,弹出窗口多用于对话框和消息框,也可以用于应用程序的主窗口,弹出窗口可以不必具有标题栏2.Overlapped窗口:一个重叠窗口是一个必须具有WS_OVERLAPPED属性的窗口,也就是一个重叠窗口必须具有边框,标题栏,客户区域。重叠窗口可以是一个子窗口,也可以是一个Top-Level窗口,重叠窗口一般都用于一个应用程序的主窗口3.Top
阅读全文
摘要:一直对窗口之间的关系有些混乱,遇到需要指定父窗口的函数时常常要考虑很久,究竟父窗口是哪个窗口,遂上网查资料,略有所悟,简记如下: 对话框中的所有控件(比如Button等)都是其子窗口。 文档/视图结构中,框架窗口是视图窗口的父窗口。 同时在使用CreateWindow和CreateWindowEx时可以指定父窗口,建立窗口的父子关系。另外,网上有篇文章讲Windows窗口的层级关系,也颇清楚,故转来备查:一、windows窗口之间的关系包括所有与被所有关系,父子关系等。 操作系统为每个窗口实例都分配一个内存空间,该空间被称为窗口实例的信息结构。该结构包含了窗口实例的所有...
阅读全文
摘要:一、概念和区别 在windows系统中,每个窗口对象都对应有一个数据结构,形成一个list链表。系统的窗口管理器通过这个list来获取窗口信息和管理每个窗口。这个数据结构中有四个数据用来构建list,即child、sibling、parent、owner四个域。所以我们可以看到,窗口之间的关系有两种:owner-owned 关系和 parent-child关系。前者称之为拥有/被拥有关系,后者称之为父/子关系。在这篇文字中,我把owner窗口称之所有者窗口。换句话说,一个窗口在有一个父窗口(parent)的同时,还可能被不同的窗口拥有(owner),也可以有自己的子窗口(child)。在MFC
阅读全文
摘要:这篇讲得很清楚,就转过来了,原文如下:因项目需要,最近在学习MFC,下午在一篇教程中提到了临时窗口、永久窗口,作者让读者自行查阅MSDN,了解临时窗口与永久窗口的概念,出于好奇,出于方便,直接百度一下,看到了几篇题为解释临时窗口与永久窗口的文章,随后网友在论坛中附上了MSDN中的原文,仔细翻译一下,发现网上查到的几篇文章,对这个概念的解释是有问题和不足的。首先我要说明一点的就是窗口是没有临时与永久之分的,窗口是一种资源,随着CreateWindow的调用而产生,随着DestroyWindow的调用而被销毁(资源所占据的内存被回收),在windows程序设计中通过句柄(这里可以将句柄看成是C++
阅读全文