DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

随笔分类 -  VC/MFC

上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 30 下一页

摘要:1.WindowProc是你给自己的窗口定义的窗口处理函数DefWindowProc是windows平台提供的默认窗口处理函数如果某些消息你不需要做特别的处理,调用DefWindowProc进行处理就可以了,不需要你自己再去些那些windows的"标准动作"2.根据1,显然,你只能定义WindowProc而不能定义DefWindowProc看看MFC的CWnd源码就一目了然了LRESULT CWnd::WindowProc(UINT message, WPARAM wParam, LPARAM lParam){// OnWndMsg does most of the wor 阅读全文
posted @ 2013-11-27 20:43 DoubleLi 阅读(370) 评论(0) 推荐(0)

摘要:首先感谢大家对第一帖的支持,应一些网友烈要求下面我在关于上一贴的一些补充和说明(老鸟可以无视)这一贴是实战+理论不知道第一帖的先看第一帖:http://topic.csdn.net/u/20110710/19/5209f358-31c8-4057-b108-02155a417fd0.html1).补充个高级可重载函数PreSubclassWindow(),我的理解是允许用户在子类化之前再做一额外些处理 ,这个重载函数也是非常重要的,要引起相当的注意。可以在这里改变控件的大小,位置,窗口样式,字体 ,等等.....你能想到的能改的,都可以在这里改.2).关于Edit的补充说明:我最初的自绘方法是 阅读全文
posted @ 2013-11-27 20:42 DoubleLi 阅读(670) 评论(0) 推荐(0)

摘要:前言:从这学期开始就一直在学习自绘控件(mfc),目标是做出一款播放器界面,主要是为了打好基础,因为我基础实在是很烂....说说我自己心得体会以及自绘控件的方法吧,算是吐槽吧,说的不对和不全的地方,或者有更好的方法,请不吝赐教。我的机器环境是:Windows7旗舰版 Service Pack 1,Visual studio 20051).重绘某个控件时,强烈推荐使用子类化方法,比如想自绘Button控件, 首先添加自己的类CMYButton 继承自 CButton ,声明一个CMYButton 对象,然后使用 SubclassDlgItem(UINT nID, CWnd* pParent ); 阅读全文
posted @ 2013-11-27 20:35 DoubleLi 阅读(747) 评论(0) 推荐(0)

摘要:HDC在MSDN中的全称为:The handle of device context。通常,我们都是用来做相应的显示操作。 熟悉WIN32的朋友对于其应该不会陌生,经常采用GetDC,GetWindowDC等等来获取其句柄。而用得最多的,可能就是BeginPaint,如:view plaincopy to clipboardprint?caseWM_PAINT:HDChdc=BeginPaint(hWnd,&ps);...EndPaint(hdc,&ps);break;[cpp]view plaincopy caseWM_PAINT:HDChdc=BeginPaint(hWnd 阅读全文
posted @ 2013-11-27 15:11 DoubleLi 阅读(1458) 评论(0) 推荐(0)

摘要:#include #include LRESULT CALLBACK WinSunProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter);int WINAPI WinMain( HINSTANCE hInstance, // handle to current instance HINSTANCE hPrevInstance, // handl 阅读全文
posted @ 2013-11-25 09:22 DoubleLi 阅读(602) 评论(0) 推荐(0)

摘要:windows窗口的创建有以下几个步骤:1、创建注册窗口类2、创建窗口句柄3、显示更新窗口4、消息循环1、创建注册窗口类所谓创建窗口类就是定义一个WNDCLASS类对象,并将该对象进行初始化。之后就要用RegisterClass()函数对该窗口类对象进行注册,以便使某个窗口与该窗口类相关联。关于WNDCLASS的定义如下:typedef struct { UINTstyle; WNDPROClpfnWndProc; intcbClsExtra; intcbWndExtra; HINSTANCEhInstance; HICONhIcon; HCURSORhCursor; HBRUSHhbrBac 阅读全文
posted @ 2013-11-25 09:21 DoubleLi 阅读(5172) 评论(0) 推荐(0)

摘要://////////////////////////////////////////////////////////////////////////////////////////MFC程序的执行顺序依次是:theApp全局对象定义处、TestApp构造函数、WinMain。程序在加载main函数之前,会先为全局变量和全局对象分配内存空间。对于MFC程序来说,通过产生一个应用程序类的对象来唯一标识应用程序的实例。每一个MFC程序实例有且仅有一个该派生类的实例化对象,也就是theApp全局对象,该对象就表示了应用程序本身。theApp对象的构造函数CtestApp在调用之前,会调用其父类CWin 阅读全文
posted @ 2013-11-25 00:06 DoubleLi 阅读(958) 评论(0) 推荐(0)

摘要:1.AfxWndProc() 该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc2.AfxCallWndProc()该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应用程序以后使用,然后调用WindowProc()函数3.WindowProc() 该函数负责发送消息到OnWndMsg()函数,如果未被处理,则调用DefWindowProc()函数4.OnWndMsg() 该函数的功能首先按字节对消息进行排序,对于WM_COMMAND消息,调用OnCommand()消息响应函数,对于WM_NOTIFY消息调用 OnNotify()消息响应函数。... 阅读全文
posted @ 2013-11-24 23:49 DoubleLi 阅读(292) 评论(0) 推荐(0)

摘要:下面有三个绘图函数需要一个指向矩形结构的指针:FillRect(hdc,&rect,hbursh);//填充FrameRect(hdc,&rect,hbrush);//掏空InvertRect(hdc,&rect);//内部取反[cpp]view plaincopy caseWM_PAINT:hdc=BeginPaint(hwnd,&ps);//GetClientRect(hwnd,&rect);//hrgn=CreateRectRgn(100,100,300,300);//hbrush=CreateSolidBrush(RGB(255,0,0));// 阅读全文
posted @ 2013-11-23 16:42 DoubleLi 阅读(944) 评论(0) 推荐(0)

摘要:(本文尝试通过一些简单的实验,来分析Windows的窗口机制,并对微软的设计理由进行一定的猜测,需要读者具备C++、Windows编程及MFC经验,还得有一定动手能力。文中可能出现一些术语不统一的现象,比如“子窗口”,有时候我写作“child window”,有时候写作“child”,我想应该不会有太大影响,文章太长,不一一更正了)问题开始于我的最近的一次开发经历,我打算把程序的一部分界面放在DLL中,而这部分界面又需要使用到Tooltip,但DLL中的虚函数PreTranslateMessage无法被调用到,原因大家可以在网上搜索一下,这并不是我这篇文章要讲的。PreTranslateMes 阅读全文
posted @ 2013-11-23 16:24 DoubleLi 阅读(1029) 评论(0) 推荐(1)

摘要:全屏显示是一些应用软件程序必不可少的功能。比如在用VC++编辑工程源文件或编辑对话框等资源时,选择菜单“View\Full Screen”,即可进入全屏显示状态,按“Esc”键后会退出全屏显示状态。 在VC++6.0中我们用AppWizard按默认方式生成单文档界面的应用程序框架。下面将先讨论点击菜单项“View\Full Screen”实现全屏显示的方法,再讲述按“Esc”键后如何退出全屏显示状态。 1) 在CMainFrame类中,增加如下三个成员变量。 class CMainFrame : public CFrameWnd { private: //自己添加的三个成员变量 WI... 阅读全文
posted @ 2013-11-23 15:19 DoubleLi 阅读(954) 评论(0) 推荐(0)

摘要://删除标题和边框WS_CAPTION和WS_BORDER风格ModifyStyle(WS_CAPTION, 0);ModifyStyle(WS_BORDER, 0); 阅读全文
posted @ 2013-11-23 15:18 DoubleLi 阅读(413) 评论(0) 推荐(0)

摘要:// TOOLTIPWND.H 添加气球式提示栏#if !defined(AFX_TOOLTIPWND_H__2C52D3E4_2F5B_11D2_8FC9_000000000000__INCLUDED_)#define AFX_TOOLTIPWND_H__2C52D3E4_2F5B_11D2_8FC9_000000000000__INCLUDED_#if _MSC_VER >= 1000#pragma once#endif // _MSC_VER >= 1000// ToolTipWnd.h : header file//// Written by Shankar (sshank 阅读全文
posted @ 2013-11-23 15:16 DoubleLi 阅读(1213) 评论(0) 推荐(0)

摘要:前言:从这学期开始就一直在学习自绘控件(mfc),目标是做出一款播放器界面,主要是为了打好基础,因为我基础实在是很烂....说说我自己心得体会以及自绘控件的方法吧,算是吐槽吧,说的不对和不全的地方,或者有更好的方法,请不吝赐教。我的机器环境是:Windows7旗舰版 Service Pack 1,Visual studio 20051).重绘某个控件时,强烈推荐使用子类化方法,比如想自绘Button控件, 首先添加自己的类CMYButton 继承自 CButton ,声明一个CMYButton 对象,然后使用 SubclassDlgItem(UINT nID, CWnd* pParent ); 阅读全文
posted @ 2013-11-22 16:10 DoubleLi 阅读(11150) 评论(1) 推荐(0)

摘要:随着Microsoft凭借Windows在操作系统上取得的巨大成绩,Windows用户界面也日益成为业界标准。统一的界面给广大用户对应用软件的学习与使用带来了很大方便。但每天都面对同一副面孔,日久天长难免会产生一些厌倦,想开发一些"离经叛道"的应用程序,如果能够一改Windows千篇一律的"标准"界面,一定会给用户带来一种清新的感觉。标准Windows应用程序窗口一般为带有标题栏的浅灰色矩形外观,因而"异形"对话框/窗口也主要是颜色与外形上动手脚。本实例实现了一个"精灵"窗口,程序编译运行后的界面效果如图一所示:图 阅读全文
posted @ 2013-11-22 16:08 DoubleLi 阅读(879) 评论(0) 推荐(0)

摘要:前一阵突然想起了9月份电面某公司实习时的二面题,大概就是说怎么用Win32 API实现一个透明的窗口,估计当时我的脑残答案肯定让面试官哭笑不得吧。所以本人决定好好研究下这个问题。经过一下午的摸索,基本掌握了使用Win32 API创建各种匪夷所思的窗口的基本思路。(以下文字基于本人的个人理解,由于本人技术和经验原因不保证正确性,希望各位不吝指正)首先我们需要了解一些基础知识。1、Layered Windows。这是Windows2000开始引入的新概念,重新定义了窗口的Hit Testing方法,以前都是把窗口按rectangle的方式裁剪,而把窗口加上WS_EX_LAYERED的Style后就 阅读全文
posted @ 2013-11-22 15:52 DoubleLi 阅读(5601) 评论(0) 推荐(0)

摘要:前面提到,我们可以用SetWindowRgn或SetLayeredWindowAttributes实现不规则以及半透明的效果对于SetWindowRgn,它通过一个Rgn来设置区域,这个Rgn一般可以从图片中读取,在这张图片中,将不需要显示的区域标记为一种特殊的颜色,这里有个问题,必须保证这种颜色没有被正常的区域使用,否则会被误伤。为了解决这个问题,可以考虑用两张图片,增加一张单色的掩码图,这种方案带来了额外的管理开销。SetWindowRgn的好处是效率较高,对于大部分自绘的皮肤,一般只有四个角落有一些不规则,所以用SetWindowRgn是最好的选择。SetLayeredWindowAtt 阅读全文
posted @ 2013-11-22 15:49 DoubleLi 阅读(9061) 评论(0) 推荐(0)

摘要:(声明:Alberl以后说到开源库,一般都是指著名的、或者不著名但维护至少3年以上的。那些把代码一扔就没下文的,Alberl不称之为开源库,只称为开源代码。这里并不是贬低,像Alberl前面那个系列的教程《2013 duilib入门简明教程》,还有本系列教程,还有前面介绍的CodeProject,基本上都是代码往上面一扔,就不用再怎么维护的。这些都称之为开源代码,其实开源代码对新手的帮助更大,因为很简明的说明了代码用法~O(∩_∩)O~) 前面两个教程已经对制作界面的几种方式进行了比较,权威界面库已经比较过了,那么接下来就是上一个教程介绍的那三种方式。 而上一个教程已经说的很明确了,用那三.. 阅读全文
posted @ 2013-11-22 15:40 DoubleLi 阅读(31057) 评论(3) 推荐(2)

摘要:代码下载:http://download.csdn.net/detail/qq316293804/6502879迅雷播放器教程汇总:仿迅雷播放器教程 -- 基于ffmpeg的C++播放器 (1)仿迅雷播放器教程 -- 媒体播放器对比 (2)仿迅雷播放器教程 -- 媒体播放三大底层架构简析 (3)仿迅雷播放器教程 -- 基于VLC的C++播放器 (4)仿迅雷播放器教程 -- 封装VLC (5)仿迅雷播放器教程 -- 基于VLC的MFC播放器 (6)仿迅雷播放器教程 -- 十年经验大牛对MFC的认识 (7)仿迅雷播放器教程 -- 权威界面库对比 (8)仿迅雷播放器教程 -- C++界面制作方法的对 阅读全文
posted @ 2013-11-22 15:35 DoubleLi 阅读(972) 评论(0) 推荐(1)

摘要:工作线程,在一些技术文章被称为辅助线程,是相对于主线程而言的。在工作线程中使用界面需要一些技巧。我就曾在工程线程中弹出对话框中遇到过莫名奇妙的错误。下面就我的经验谈谈如何从工作线程中弹出对话框(暂时只讲方法,原理还没彻底弄清楚)。实际上在工作线程中直接弹出模式对话框中在debug模式下有时出错(这里的有时的意思是必然会出错,但是不是每次都出错),弹出模式对话框的代码如下:DWORDWINAPIRecvThread(LPVOIDlpParam)//工作线程函数{CAIDlgProductNamedlg;if(dlg.DoModal()==IDOK){……}}错误截图:如果跟踪DoModal函数, 阅读全文
posted @ 2013-11-21 11:04 DoubleLi 阅读(1385) 评论(0) 推荐(0)

上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 30 下一页