123456

 
上一页 1 ··· 24 25 26 27 28 29 30 31 32 ··· 39 下一页

2011年9月6日

树形控件

摘要: 滚动条从有到无,怎么都不消失,仔细跟了下,发现list会SetScrollRanger后自动调用ShowScrollBar来隐藏,所以hook SetScrollRanger,加入代码: wchar_t szClass[MAX_PATH] = {0}; GetClassName(hWnd, szClass, MAX_PATH); if(lstrcmpiW(szClass, TEXT("SysTreeView32"))==0) { if (nMaxPos == nMinPos) { ShowScrollBar(hWnd, nBar, false); return TRUE; 阅读全文

posted @ 2011-09-06 19:33 hgy413 阅读(149) 评论(0) 推荐(0) 编辑

ComLbox不刷新的BUG

摘要: 用spy++仔细看了,在下拉框打开时,不响应WM_NCPAINT消息,所以打印出所有消息,确定在70,71消息时强制刷新次代码如下:case WM_WINDOWPOSCHANGED: OnNcPaint(psb, (HRGN)1); break; case WM_WINDOWPOSCHANGING: OnNcPaint(psb, (HRGN)1); break;句柄可通过if(WM_CTLCOLORLISTBOX == message) { HWND hListBox = (HWND)lParam;也可通过外部的COMBOBOXINFO ci = {sizeof(ci)}; ci... 阅读全文

posted @ 2011-09-06 19:29 hgy413 阅读(148) 评论(0) 推荐(0) 编辑

2011年9月2日

MemDC,GDI绘制注意点

摘要: 最近绘制老犯同样的错误,记录下:1.MemDC中的MemBmp大小一定要设定好,经常设小了,后面的绘不出来,同时最后dc.bitblt时,大小一定要和MemBmp 一致,同样经常是MemBmp必变了,bitblt的rcDest没变,结果还是绘不出来。2.MemDC上绘制是在(0,0, MemBmp.width, MemBmp.Height)区域上绘的,经常rc设成dc所在窗口的坐标了。3.MemDC.SelectObject,可以在选了bmp,同时再选pen,当然不是再选bmp,不然原来的画布就被换成新的bmp了,那就白画了4.MemDC中可以再次多缓冲,当然这时CDC MemDc2 ;Mem 阅读全文

posted @ 2011-09-02 15:46 hgy413 阅读(262) 评论(0) 推荐(0) 编辑

2011年9月1日

禁用拖动时显示窗口

摘要: 在电脑-属性-高级-性能设置-拖拉时显示窗口内容,如果选中这个框,那么其他窗口在自绘的窗口拖动就很闪,没法了,禁用它,程序关闭后再还原它判断是否这个属性勾上了:BOOL CMTSFrmApp::IsDragFullWindows(){ BOOL bRet = FALSE; if ( ::SystemParametersInfo( SPI_GETDRAGFULLWINDOWS, NULL, &bRet, NULL ) ) { return bRet; } return FALSE;}如是,去掉这个属性: m_bDragFull = IsDragFullWindows(); if (... 阅读全文

posted @ 2011-09-01 15:13 hgy413 阅读(289) 评论(0) 推荐(0) 编辑

2011年8月31日

BM_SETSTATE

摘要: 精确地讲,当按钮接收到BM_SETSTATE消息并且wParam设置到TRUE时,BM_SETSTATE是按钮专有的消息,用于请求按钮绘制‘按下’或‘释放’模式,每次点击(或发送BM_SETSTATE消息),Windows都自动地通知父窗口这个事件。对于按钮就是BN_CLICKED消息不小心搞掉这个消息,结果不响应BN_CLICKED了,win7直接报无效的参数,当然,可以用SendMessage( GetParent(hWnd), WM_COMMAND, GetDlgCtrlID(hWnd), (LPARAM) (hWnd) );来发送消息. 阅读全文

posted @ 2011-08-31 14:38 hgy413 阅读(186) 评论(0) 推荐(0) 编辑

2011年8月26日

Scroll位置计算

摘要: thumb可滚动的长度track_len:等于整个滚动条长度减去两个滚动条上的按钮:track_len = scrollbar_len - scroll_buttion_len * 2thumb的长度:thumb_len / track_len = si.page / (si.max-si.min);为安全起见,一般写成thumb_len / track_len = si.page / (si.max-si.min+1);thumb_len = MulDiv(si.page, track_len, si.max-si.min+1);//thumb的pos和si.pos对应,先假定thumb_p 阅读全文

posted @ 2011-08-26 20:17 hgy413 阅读(160) 评论(0) 推荐(0) 编辑

2011年8月25日

CListCTrl控件排序

摘要: 列表控件(CListCtrl)的排序功能不像其它直接调用API就可以完成的功能一样.它比较复杂.今天将我的一点体会简单地谈一下. 列表控件的顶部有一排按钮,用户可以通过选择不同的列来对记录进行排序。但是 CListCtrl并没有自动排序的功能,我们需要自己添加一个用于排序的回调函数来比较两个数据的大小,此外还需要响应排序按钮被点击的消息。回调函数就好像是一个中断处理函数,操作系统在符合你设定的条件时自动调用。·CListCtrl提供了用于排序的函数 函数原型为: BOOL CListCtrl::SortItems( PFNLVCOMPARE pfnCompare, DWORD dwD 阅读全文

posted @ 2011-08-25 22:03 hgy413 阅读(279) 评论(0) 推荐(0) 编辑

2011年8月24日

谁分配谁释放

摘要: 在linux下跑得一直很好的程序,到了windows下面就跑不起来了。内存异常,检查了一下,很快发现是因为在主程序中释放了一块在DLL中分配的内存,这种问题虽然早就知道了,但是一直没有仔细考虑过,所以今天就深入研究了一下。在linux下,每个进程只有一个heap,在任何一个动态库模块so中通过new或者malloc来分配内存的时候都是从这个唯一的heap中分配的,那么自然你在其它随便什么地方都可以释放。这个模型是简单的。但是在windows下面,问题变得复杂了。1、windows允许一个进程中有多个heap,那么这样就需要指明一块内存要在哪个heap上分配,win32的HeapAlloc函数就 阅读全文

posted @ 2011-08-24 21:29 hgy413 阅读(219) 评论(0) 推荐(0) 编辑

谁分配谁释放HEAP

摘要: 在linux下跑得一直很好的程序,到了windows下面就跑不起来了。内存异常,检查了一下,很快发现是因为在主程序中释放了一块在DLL中分配的内存,这种问题虽然早就知道了,但是一直没有仔细考虑过,所以今天就深入研究了一下。在linux下,每个进程只有一个heap,在任何一个动态库模块so中通过new或者malloc来分配内存的时候都是从这个唯一的heap中分配的,那么自然你在其它随便什么地方都可以释放。这个模型是简单的。但是在windows下面,问题变得复杂了。1、windows允许一个进程中有多个heap,那么这样就需要指明一块内存要在哪个heap上分配,win32的HeapAlloc函数就 阅读全文

posted @ 2011-08-24 21:27 hgy413 阅读(163) 评论(0) 推荐(0) 编辑

2011年8月23日

Combox滚动条hook

摘要: 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 is not obvious how to subclass the COMBOLBOX control. Luckily,under the Win32 API, Windows se 阅读全文

posted @ 2011-08-23 10:55 hgy413 阅读(229) 评论(0) 推荐(0) 编辑

上一页 1 ··· 24 25 26 27 28 29 30 31 32 ··· 39 下一页

导航