代码改变世界

随笔分类 -  VC++

玩转位图(bitmap)2

2012-11-08 01:12 by 捣乱小子, 1239 阅读, 收藏, 编辑
摘要: 2012年11月8日9:25:47 已上传源代码和可执行文件2012年11月8日1:03:01 深夜断网,不能上传源码和可执行文件,明日早起补上。喜欢的童鞋们先收藏。小丸子查看大图:http://daoluan.net/blog/wp-content/uploads/2012/11/Maruko.jpg接上篇:http://daoluan.net/blog/enjoy-bitmap/上篇中发布的程序中不支持png,jpg,gif等主流的图片格式的玩转,只支持24位位图。这一次对软件做以下更新:提供png,jpg(jpeg),tif(tiff)三种图片格式(抱歉gif尚未解决)的支持根据图片的大 阅读全文

玩转位图(bitmap)

2012-11-01 12:51 by 捣乱小子, 1860 阅读, 收藏, 编辑
摘要: 这是别人的网页版。http://photo2text.com/乔帮主年前加入一个项目小组,只要是做图像处理的软件,组内分配第一个任务便是熟悉位图。http://www.cnblogs.com/daoluanxiaozi/tag/MFC%E5%B0%8F%E9%A1%B9%E7%9B%AE/,但后来不知道为什么,没有呆下去。大三刚开学的时候,@杨海坡 换了个QQ头像,大致的效果如下(原图见about页面):图片中有小小的方块,每个方块内对应一个字符。YY下,结合对位图的了解,可以动手实现,“这个可以有”。png,jpg,gif等都不懂,所以从位图下手,来实现图片的处理。思路:读bmp文件读取一个 阅读全文

UIButton 简易的UI

2012-09-10 12:34 by 捣乱小子, 2528 阅读, 收藏, 编辑
摘要: 前些阵子,听说有个DirectUI的源码,很有兴致的去Google code上下载下来阅读,但后来没有坚持下来,DirectUI所看重的是窗口的安全性:只要能得到窗口的句柄,你几乎可以为所欲为了;但DirectUI显然没有这个问题,因为其所支持的控件都是windowless,没有句柄的,所有控件都是画出来的。接下来折腾XPButton,总算能看懂。但按钮依旧没有摆脱窗口,只是简单基础基础类库CButton,通过自绘实现DIYbutton。通过绘图的方式可以实现UIButton(画出来的按钮)。但在MFC下如果有多个按钮,那么代码会变得比较凌乱,所以可以把这部分抽象出来得到UIButton类。下 阅读全文

MFC DLEdit 设计属于自己的编辑框

2012-02-04 13:00 by 捣乱小子, 13499 阅读, 收藏, 编辑
摘要: 起因 无意间看到了大牛们写的自定义编辑框控件,于是找了个时间自己写了一个,加深了对MFC消息机制和一些功能的了解。分析 先来看一张QQ2011的登录窗口,发现当鼠标悬停在编辑框上的时候,会有悬停边框高亮,这样给用户一种很绚丽的视觉享受,但我相信大家每天都上q,从而都忽略了这些美丽,细心分析一下,QQ的每一个器官甚至一根毛都是经过精心设计的。当编辑框失去输入焦点,而编辑框内文本为空的时候,会有灰色提示文本,提示用户输入。 还可以有好多的自定编辑框功能,美化我们的编辑框。具体实现和细节 在之前《MFC自动隐藏》这篇文章中的技术细节有与DLEdit相似的地方,那就是鼠标悬停的判断。当鼠标悬停... 阅读全文

MFC 鼠标去留

2012-02-04 11:48 by 捣乱小子, 1503 阅读, 收藏, 编辑
摘要: 题目不醒目,特解 win32编程中,有两个消息比较特别,WM_MOUSEHOVER和WM_MOUSELEAVE。系统不会想应用程序发送这两个消息,MSDN中规定要用到TrackMouseEvent方法来向程序投递这两个消息。去留分析 去WM_MOUSELEAVE,留WM_MOUSEHOVER。打个比方,调用TrackMouseEvent就向在消息队列中设置了一个哨兵,当发现WM_MOUSEHOVER或者WM_MOUSELEAVE的时候,就将其放入消息队列,而此时如果这个消息是WM_MOUSELEAVE这个哨兵会消失,而如果这个消息是WM_MOUSEHOVER,这个哨兵会暂留,但是他只能检测.. 阅读全文

MFC 自定义消息

2012-01-28 15:12 by 捣乱小子, 2812 阅读, 收藏, 编辑
摘要: WIN32编程回忆在MFC中,听得最多的莫过于“消息”这词,透彻理解MFC的消息机制对学习MFC大有裨益。依稀记得,在纯C的win32编程中,写的最多就是WinMain和win消息处理函数, 我当时有个模板,每每建立一个win32的工程,我就把他复制进去,大概的如下:#include<windows.h>#defineCLSNAME""#defineWNDNAME""LRESULTCALLBACKWindowProc(HWNDhwnd,UINTuMsg,WPARAMwParam,LPARAMlParam);intWINAPIWinMain(H 阅读全文

我的第一个MFC小项目(4)之 位图转换(续)

2011-12-20 20:22 by 捣乱小子, 2330 阅读, 收藏, 编辑
摘要: 非常感谢Imageshop的指正,代码有修改,主要是:计算8位位图像素位使用了更高效的整点运算;去除多余的变量检测。求网友们支招:在32位位图中有Alpha值,在转换成8位灰阶位图的时候可以直接省略吗? 在《我的第一个MFC小项目(3)之 位图转换》中,有关于将24位的彩色位图转换为8位的灰阶位图,发散一下就很容易可以得到32位位图彩图转换为8位的灰阶位图,看图:32位位图多出一个Alpha字节,用来描述图片的透明度,根据这一特性,可以将Alpha特意忽略,然后将紧跟其后的RGB按照《我的第一个MFC小项... 阅读全文

我的第一个MFC小项目(3)之 位图转换

2011-12-08 16:20 by 捣乱小子, 3456 阅读, 收藏, 编辑
摘要: 关于位图的格式,文件头,信息头,颜色表,像素位等等,我在以前在《我的第一个MFC小项目(2)》有过简单的介绍,当时还操VISIO自己画图呢,不过当时真的非常非常的模糊,甚至还没有灰度图和彩图的概念。没有捧着一本书认真研究,纯粹是完成项目过程当中遇到什么不懂的就直接google...欢迎拍砖,欢迎讨论。8位位图除了可以索引彩色图像外,也可以是灰阶图像,相信更多的是用于灰度的图像,既然有8位的灰阶图像,也就是说从白到黑分成256种渐变,那16位灰阶图像也是存在的,只不过从白到黑分成2^16种渐变;但这是一种很大的浪费我觉得,因为灰阶图像应用不是非常广,在一些专业领域或许会用到。而如今PC下的更多的 阅读全文

MFC按钮CXPButton类,代码阅读起来还是挺不错的

2011-11-16 13:06 by 捣乱小子, 2078 阅读, 收藏, 编辑
摘要: 在操手MFC的时候,经常会抱怨MFC界面不如其他的框架或语言,比如VB,C#等等,面对MS在系统上的不断更新换代,我们也越来越追求软件的视觉效果,譬如我们会更喜欢win7下的玻璃效果,看起来很炫。在接触MFC的时候,实在忍不住对MFC的bulider的仰慕之情,因为他把之前的win32 c编程(注意,里面没有面向对象)和C++有机的结合起来了(这时OO跑进来了),让我们更多的专注于软件的功能设计方面,减少了程序繁杂(真心真诚的佩服win32走过来的那些来程序员们)。每天都有新的收获,当然不仅仅是软件方面的,因为最近讲师在教我们设计自己的U,其实这个看起来还是蛮有难度的,实际上也很有难度,但是讲 阅读全文

MFC中托盘(TRAYICON)实现

2011-11-12 20:42 by 捣乱小子, 3416 阅读, 收藏, 编辑
摘要: 写在最前面的将MFC中托盘功能模块抽象成一个类,把整个程序的功能模块细分了。这个想法在网上已经是俯拾即是了,但仍旧不能一下子明白其中的东西,特别是将其抽象之后。 在使用这个类的时候,需要注意:托盘菜单的ID要和图标资源的ID一样,否则会出错。具体实现代码添加新的类,选择父类是CCmdTarget,下面的代码中有足够的提醒:TrayIcon.h#pragmaonce//TrayIcon.h:头文件////继承自CCmdTarget才能接收消息,详见《深入浅出MFC》classCTrayIcon:publicCCmdTarget{DECLARE_DYNAMIC(CTrayIcon)public:C 阅读全文

对《VC中添加WM_DEVICECHANGE消息(经典)》的补充

2011-10-31 20:12 by 捣乱小子, 3196 阅读, 收藏, 编辑
摘要: 笔者在VC中添加WM_DEVICECHANGE消息(经典)中就做了关于消息WM_DEVICECHANGE的笔记,是酷狗的将歌曲发送至移动设备让我有感而发,其实在win下的右键菜单功能就已经有了这个功能。但是知道了有新的设备是完全不够的,为了能够达到更加客观的效果,至少让用户知道这个盘符(A,B,C,…)和其卷标。(相信通过盘符我们以后又可以对文件进行操作,到时一头雾水之时,兴许可以在此处找到答案)一开始便把头埋进msdn的瀚海里,准把我淹死,所以学习计算机的童鞋们要好好提高英语的水平,绝对没有害处。入主题。同样是在处理WM_DEVICECHANGE的函数内,现在知道了,DWORD dwData 阅读全文

win32的时间api

2011-10-24 21:08 by 捣乱小子, 1190 阅读, 收藏, 编辑
摘要: 在时间函数当中会用到两个比较常用的函数,GetSystemTime和GetLocalTime,其中前者是得到格林威治时间,后者是得到当地的时间,大家知道格林威治时间是世界标准时间,我们国家用的是北京时间,而北京在在东八区,自然要加八个小时。在一些软件日志和数据录入(比如销售详明)都会调用时间函数。 不说那么多,直接上代码: #include <windows.h>#include <std... 阅读全文

win32可以自定义消息

2011-10-16 21:08 by 捣乱小子, 3706 阅读, 收藏, 编辑
摘要: #include <windows.h>#include <process.h>#include <math.h>#define CLSNAME "Bigjob1"#define WNDNAME "yanshi"#define REP 1000000#define STATUS_READY 0#define STATUS_WORKING 1#define STATUS_DONE 2#define WM_CALC_DONE (WM_USER+0)#define WM_CALC_ABORTED (WM_USER+1)typ 阅读全文