
VC-UI
文章平均质量分 91
花熊
毕业于西安交通大学
展开
-
SetStretchBltMode() 防止图片失真
当用StretchBlt缩小时,我们经常发现它会失真:其原因为当StrecthBlt() 的DestRect比SorRECT小時 必須要將一些点去掉他的预设做法 是將要去掉的点与旁边的点做AND运算,所以导致像素错误,解决方法:(原图)COLORONCOLOR:直接將不要的点删掉.HALFTONE:將要删掉的像素跟周围的中和起來,這样可得到较好的画质 不过效率当然要牺牲点(...原创 2011-09-17 18:05:47 · 18807 阅读 · 2 评论 -
0.VC(ui)-hook-DrawItem挂掉
今天hook按钮挂掉了,出错就是下面的信息,原因为动态创建了一个button:void CButton::DrawItem(LPDRAWITEMSTRUCT){ASSERT(FALSE);}解决方法:一定要让父窗口处理WM_DRAWITEM,在这个消息中对所有当前所有带自绘属性的BTN处理,并return ,因为BTN不重载OnDrawItem()就挂了。,原创 2011-08-15 21:38:13 · 1280 阅读 · 0 评论 -
0.VC(ui)-WM_NCHITTEST message总结
最近hook滚动条,用到了很多这方面小知道,总结下:HTBORDER:In the border of a window that does not have a sizing border.边界上!that does not have a sizing border原创 2011-09-24 14:02:31 · 1004 阅读 · 0 评论 -
0.VC(ui)-hook 换肤ERROR 汇总
以下为hook dll在项目应用中,由大家帮助发现的BUG:1.hook Dialog,又发现一个小BUG,就是在SetWindowText设置caption时,不刷新过来,本以为是WM_SETTEXT消息刷新下,发现不行,老招,打印所有消息,发现存在个WM_GETICON消息,处理下,调用NCPAINT,搞定,记录下.2.hook Button, 必须在WM_SETTEXT中加一个刷新,原创 2011-09-23 18:49:51 · 1683 阅读 · 0 评论 -
0.VC(ui)-hook-BM_SETSTATE
精确地讲,当按钮接收到BM_SETSTATE消息并且wParam设置到TRUE时,BM_SETSTATE是按钮专有的消息,用于请求按钮绘制‘按下’或‘释放’模式,每次点击(或发送BM_SETSTATE消息),Windows都自动地通知父窗口这个事件。对于按钮就是BN_CLICKED消息不小心hook这个消息,结果不响应BN_CLICKED了,win7直接报无效的参数,当然,可以用SendMes原创 2011-08-31 14:38:46 · 2742 阅读 · 0 评论 -
0.VC(ui)-WM_KILLFOCUS和WM_SETFOCUS
<br />当windows将输入焦点从一个窗口转换到另一个窗口时,它首先给正在失去焦点的窗口发一个WM_KILLFOCUS消息,wParam参数是接收输入焦点的窗口的句柄,然后window向正在接收输入焦点的窗口发送一个WM_SETFOCUS消息,同时wParam是还在失去输入焦点的窗口的句柄,(WPARAM为NULL表示没有窗口拥有或正在接收输入焦点)<br /> <br />写个示例:父窗口可以阻止子窗口获得输入焦点.<br /> case WM_KILLFOCUS: Sethwnd = (H原创 2011-05-23 21:51:00 · 13357 阅读 · 2 评论 -
0.VC(ui)-InvalidateRect 和validateRect 和wm_paint
今天复习了下windows程序设计五第9章节,想到了个问题: case WM_PAINT : InvalidateRect (hwnd, &rect, TRUE) ; hdc = BeginPaint (hw原创 2011-05-22 20:17:00 · 2250 阅读 · 1 评论 -
21.VC(ui)-DIB段
1.CreateDIBSection?HBITMAP CreateDIBSection( HDC hdc, // 参考设备上下文句柄 CONST BITMAPINFO *pbmi, //指向包含位图信息头,位屏蔽和颜色表的BITMAPINFO结构 UINT iUsage, // iUsage指明颜色表内是否包含的原创 2012-01-29 16:15:31 · 1467 阅读 · 0 评论 -
20.VC(ui)-图片处理的一些函数
自己经常写的,写多了就慢慢总结下来,方便://--------------------------------------------------- // 函数介绍:把资源写入lpImage,支持BMP,PNG,JPG. // 输入参数: // 输出参数: // 返回值: //-----------------------------------------------原创 2011-12-30 20:17:08 · 1072 阅读 · 0 评论 -
0.VC(ui)-WM_NCCALCSIZE计算客户区
当wParam为FALSE时,只有rgrc[0]可用,为新窗口的窗口区域(B),此时需返回新窗口的客户区大小(BC)。当wParam为TRUE时,rgrc[0]、rgrc[1]、rgrc[2]都有效.rgrc[0]和前面的一样,rgrc[1]为原先窗口的区域(A),原创 2011-10-11 20:13:24 · 1225 阅读 · 0 评论 -
0.VC(ui)-hook-解决ComLbox不刷新的BUG
用spy++仔细看了,在下拉框打开时,不响应WM_NCPAINT消息,所以打印出所有消息,确定在70,71消息时强制刷新次代码如下:case WM_WINDOWPOSCHANGED: OnNcPaint(psb, (HRGN)1); break; case WM_WINDOWPOSCHANGING: OnNcPaint(psb, (HRGN)1); break;原创 2011-09-06 19:29:24 · 763 阅读 · 0 评论 -
REDM-开源的商业化DirectUI库
REDM-开源的商业化DirectUI库原创 2016-09-20 13:46:09 · 3389 阅读 · 1 评论 -
0.VC(ui)-H前景色和背景色(单色图和彩色图转换)
在制作透明位图时,经常用到单色图(遮罩图,两色图)将他与目标位图进行"与""或"等操作就能得到想要的透明效果,在其中用到的最多的就是BitBlt这个函数,另外,在使用之前是要对目标位图进行前景和后景颜色的设置,为什么呢?请看MSDN的解说: 单色图与彩色图之间的转换 模拟透明的方法也包含基于windows的单色图向彩色图转换的机制,反之亦然。Windows概念中的文本颜色原创 2011-06-24 09:59:00 · 2022 阅读 · 0 评论 -
0.VC(ui)-相对路径载入任意类型的图片函数(随手代码)
#pragma once#include "atlimage.h"class CImageDraw{public: CImageDraw(void);public: ~CImageDraw(void);public:static bool LoadImageFromResource(IN CImage* pImage,IN UINT nResID, IN LPCTSTR lpTyp);void原创 2010-05-26 21:32:00 · 1366 阅读 · 0 评论 -
0.VC(ui)-hook-树形控件滚动条刷新bug
滚动条从有到无,怎么都不消失,仔细跟了下,发现list会SetScrollRanger后自动调用ShowScrollBar来隐藏,所以hook SetScrollRanger,加入代码: wchar_t szClass[MAX_PATH] = {0}; GetClassName(hWnd, szClass, MAX_PATH); if(lstrcmpiW(szClass, TEXT("原创 2011-09-06 19:33:56 · 1016 阅读 · 0 评论 -
0.VC(ui)-处理WM_NCACTIVE去掉默认边框
当改变窗口大小、移动窗口到屏幕边界时,都会产生一个 WM_NCPAINT 消息,要求NC区域重绘。但是当右键点击任务栏时,会弹出菜单,同时窗口的标题栏会变色,此时不会产生 WM_NCPAINT来重绘,而是产生一个 WM_NCACTIVE消息,系统会去重绘。所以,做界面皮肤时,处理原创 2011-07-25 19:48:10 · 2338 阅读 · 0 评论 -
0.VC(ui)-hook-改变ToolBar背景色
只改变背景色,懒得去网上找来找去了,直接在MSDN上看了下属性TBSTYLE_FLAT Version 4.70. Creates a flat toolbar. In a flat toolbar, both the toolbar and the buttons are原创 2011-08-07 10:15:11 · 4584 阅读 · 2 评论 -
0.VC(ui)-hook menu实现自绘
花了一天时间,终于把菜单hook完了,贴个图: 记录下具体的实现:1.得到菜单句柄,给菜单窗口发送MN_GETHMENU,这个消息就可以获取菜单句柄2.处理消息WM_NCPAINTWM_PRINTWM_PRINTCLIENTWM_PAINT原创 2011-08-11 16:10:33 · 1321 阅读 · 0 评论 -
0.VC(ui)-hook-Combox滚动条
How do I subclass the listbox portion of a combobox? The listbox portion of a combobox is of type COMBOLBOX (notice the "L "). Because the ComboLBox window is not a child of the ComboBox window, it i原创 2011-08-23 10:55:47 · 2137 阅读 · 0 评论 -
19.VC(ui)-加载图片资源的方法(随手代码)
BOOL CImageManager::LoadResImage(UINT nResID, LPCTSTR lpType, Bitmap *&lpImage, HINSTANCE hInstance){ lpImage = NULL; hInstance = (NULL == hInstance) ? ::AfxGet原创 2011-12-14 17:18:59 · 1164 阅读 · 0 评论 -
18.VC(ui)-SelectClipRgn
SelectClipRgn(NULL)或SelectClipRgn(NULL, RGN_COPY)表示当前选中全部区域,cwindowdc就是window区域,cclientdc就是client区域每次绘制前都可以用SelectClipRgn来选中一块区域,再绘制,再选中一块区域,再绘制,不第二次用SelectClipRgn选中,上次绘制的不会被擦除,当然可以结合ExcludeClipRe原创 2011-11-10 10:38:57 · 5687 阅读 · 0 评论 -
17.VC(ui)-托盘图标和弹出菜单的实现(随手代码)
直接上代码:void CIconDemoDlg::InitTrayIcon(void){ //-------------------------------------------------- // NOTIFYICONDATA: // cbSize:原创 2011-09-28 13:51:15 · 1975 阅读 · 0 评论 -
8.VC(ui)-自绘对话框基类
所有的对话框都是基于CDialog的,也就都具有CDialog的特征,本文以CDialog为基类派生一个新的类CSkinDialogBase,只需将基于CDialog的对话框中CDialog替换成CSkinDialogBase,则可具有自绘DLG的特征.下面例子是自己重绘了非客户区及客户区底色完成的一个圆角Dialog的基类,直接上图:原创 2010-12-26 12:39:00 · 3628 阅读 · 1 评论 -
7.VC(ui)-无边框/有边框菜单自绘
菜单自绘分为两类,一类为无边框,一类为有边框,无边框是通过hook实现的,有边框菜单:原创 2010-12-13 20:27:00 · 5145 阅读 · 3 评论 -
5.VC(ui)-背景透明的static控件
HBRUSH Xxxxx::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){ HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if (nCtlColor == CTLCOLOR_STATIC) { pDC->SetBkMode(TRANSPARENT); //pDC->SetTextColor(RGB(255,0,0)); return HBRUSH(Get原创 2010-11-24 20:58:00 · 918 阅读 · 1 评论 -
4.VC(ui)-拖动效果的一个实现方案
以下转自好友博客: 拖动是界面编程频繁使用的一个效果,在windows系统下可谓大行其道。纵观时下的应用软件几乎各个都支持各种各样拖动的效果,windows7更是把拖动做到了极致。其实说起来拖动的实现也很简单,对于有句柄的对象都可以通过MoveWindow或SetWindowPos实现位置变动,而没有句柄的对象实现拖动无非就是做些参数修改,说到底实现拖动就是在OnLButtonDown、OnMouseMove和OnLButtonUp中处理数据,当然你可以使用鼠标右键甚至中建消息来实现,基本原理是一样的原创 2010-11-24 16:40:00 · 1239 阅读 · 0 评论 -
2.VC(ui)-MFC控件自绘属性的总结
MFC 自绘原创 2010-08-11 18:36:00 · 2206 阅读 · 0 评论 -
1.VC(ui)-单选按钮的自绘实现
于6月30写完单选按钮代码,记录如下,可自己在create后通过void LoadNoSelBmp(UINT IdNoCheck);//未点击时的图片void LoadSelBmp(UINT IdCheck)//点击时的图片加载各种图片,GetCheckedRadioButton(IDC_RADIO1, IDC_RADIO2)来自定义单选按钮的群组也就是IDC_RADIO1到IDC_RADIO2为一组单选按钮实现方法:要实现自绘,可以重载Create,加上 dwStyle &= ~(0xF); // re原创 2010-07-11 17:13:00 · 2276 阅读 · 2 评论 -
9.VC(ui)-怎么让单行EDIT文本居中
利用多行文本框来模拟单行进行设置垂直居中派生一个基于CEdit的类CEditEx,重载create函数,记住是create,不是WM_ONCREATE消息,重载的目的是为了保证起始光标位置就在竖直中间靠左位置,代码如下原创 2011-01-19 11:15:00 · 5053 阅读 · 2 评论 -
3.VC(ui)-clistbox 和button的自绘
listbox 自绘 button原创 2010-08-11 19:00:00 · 2044 阅读 · 0 评论 -
16.VC(ui)-CEdit自绘点
就几个点:背景色,字体颜色,字体大小,注意的是字体大小最好用WM_SETFONT来处理,我也是在挂钩时打印消息发现了它,直接看MSDN就知道怎么发送了。代码:HBRUSH CSkinEdit::CtlColor(CDC* pDC, UINT nCtlColor)原创 2011-09-10 13:31:51 · 1720 阅读 · 1 评论 -
15.VC(ui)-listctrl绘制(解决水平滚动文字重影bug)
犯了一个小错,水平滚动时出现文字重影,所以改了下:错误在于,在遍历列时,我用 CRect rcColumn; GetHeaderCtrl()->GetItemRect(i, &rcColumn);这是错误的,因为一旦水平滚动时,这样得到的rcColumn就会不确定原创 2011-09-08 20:27:30 · 1186 阅读 · 0 评论 -
14.VC(ui)-禁用拖动时显示窗口
在电脑-属性-高级-性能设置-拖拉时显示窗口内容,如果选中这个框,那么其他窗口在自绘的窗口拖动就很闪,没法了,禁用它,程序关闭后再还原它 判断是否这个属性勾上了:BOOL CMTSFrmApp::IsDragFullWindows(){ BOOL bR原创 2011-09-01 15:13:15 · 1578 阅读 · 0 评论 -
13.VC(ui)-Scroll位置计算
thumb可滚动的长度track_len:等于整个滚动条长度减去两个滚动条上的按钮:track_len = scrollbar_len - scroll_buttion_len * 2thumb的长度:thumb_len / track_len = si.page /原创 2011-08-26 20:17:16 · 983 阅读 · 0 评论 -
12.VC(ui)-AlphaBlend参数BLENDFUNCTION
AlphaBlend是Window自带的GDI函数,在作GUI的时候为了达到更漂亮的效果我们常常用它. BLENDFUNCTION是AlphaBlend用控制透明效果的重要参数. 定义如下: typedef struct _BLENDFUNCTION {原创 2011-08-13 16:29:39 · 3575 阅读 · 0 评论 -
11.VC(ui)-单色图与彩色图之间的转换
在制作透明位图时,经常用到单色图(遮罩图,两色图)与目标位图进行"与""或"等操作就能得到想要的透明效果,在其中用到的最多的就是BitBlt这个函数,另外,在使用之前是要对目标位图进行前景和后景颜色的设置,为什么呢?请看MSDN的解说: 模拟透明的方法也包含基于window原创 2011-08-11 16:33:29 · 1339 阅读 · 0 评论 -
10.VC(ui)-子窗口和父窗口重绘
<br />子窗口无效不会引起父窗口重绘,父窗口无效,如果父窗口收到WM_PAINT,则所有子窗口都会在父窗口处理WM_PAINT之后收到WM_PAINT重绘消息,当然,如果父窗口带有属性WS_CLIPCHILDREN,则不会引起子窗口重绘原创 2011-05-24 09:42:00 · 4928 阅读 · 0 评论 -
6.VC(ui)-MFC下实现透明位图
我们在进行程序的界面设计时,常常希望将位图的前景显示在界面上,而将位图的背景隐藏起来,将位图与界面很自然的融合在一起,本文介绍了透明位图的制作知识,并将透明位图在一个对话框中显示了出来。直接上图:原图:Demo效果图:步骤如下: 1、设置待显示位图的背景颜色,也就是原创 2010-12-08 15:23:00 · 8970 阅读 · 4 评论