摘要:直接上代码:void CIconDemoDlg::InitTrayIcon(void){ //-------------------------------------------------- // NOTIFYICONDATA: // cbSize: 这个结构的字节大小 // hwnd: 窗口句柄,当鼠标事件发生在系统托盘上时,这个窗口将接收通知码。 // uID: 作为图标标识的一常数。你可以取任意值,但是值必须是唯一的。因为,当有多个图标在托盘上时,你将要区分鼠标消息来自于那个图标。故这个值必须取唯一值。 // uFlags 指定这个结构的那些成员变量有效。 // ...
阅读全文
摘要:1.父窗口中一定要调用EnableToolTips(TRUE);2.在oncreate中初始化:m_Tip.Create(this);m_Tip.AddTool(this, m_szTipText);3.需要显示时:if (m_Tip.GetSafeHwnd()&&m_bTipShow) { CString szTipText = m_szTipText; if (szTipText.IsEmpty()) { GetWindowText(szTipText); } if (!szTipText.IsEmpty()) { m_Tip.UpdateTipTex...
阅读全文
摘要:最近hook滚动条,用到了很多这方面小知道,总结下:HTBORDER:In the border of a window that does not have a sizing border.边界上!that does not have a sizing border好像没什么关系,反正普通的框鼠标停在边上就有这个事件(自测试)HTBOTTOMIn the lower-horizontal border of a resizable window (the user can click the mouse to resize the window vertically).可调窗体大小的下边界H
阅读全文
摘要:以下为hook dll在项目应用中,由大家帮助发现的BUG:1.hook Dialog,又发现一个小BUG,就是在SetWindowText设置caption时,不刷新过来,本以为是WM_SETTEXT消息刷新下,发现不行,老招,打印所有消息,发现存在个WM_GETICON消息,处理下,调用NCPAINT,搞定,记录下.2.hook Button, 必须在WM_SETTEXT中加一个刷新,不然在SetWindowText时,系统又自动刷回原形了,搞定,记录下 3.今天又出现一个BUG,在list下,先建立一个能出现滚动条的list ,再点击按钮,切换list到刚好满又没有滚动条时,会发现最后一
阅读全文
摘要:当用StretchBlt缩小时,我们经常发现它会失真:其原因为当StrecthBlt() 的DestRect比SorRECT小時 必須要將一些点去掉他的预设做法 是將要去掉的点与旁边的点做AND运算,所以导致像素错误,解决方法:(原图)COLORONCOLOR:直接將不要的点删掉.HALFTONE:將要删掉的像素跟周围的中和起來,這样可得到较好的画质 不过效率当然要牺牲点(相当于PS的那个模糊工具)。主要测试代码: CRect rcClient; GetClientRect(rcClient); CPaintDC dc(this); CDC dcMem; dcMem.CreateCo...
阅读全文
摘要:系统Windows\Fonts找不到,没法了,自己在EXE目录下建一个Fonts目录,直接临时调用:1.int XXX::InstallTempFont(){ wchar_t path[MAX_PATH]; GetModuleFileName(NULL,path,MAX_PATH); CString szPath = path; int nFind = szPath.ReverseFind('\\'); szPath = szPath.Left(nFind) + TEXT("\\Fonts\\TruthCYR-Regular.otf"); return Ad
阅读全文
摘要:就几个点:背景色,字体颜色,字体大小,注意的是字体大小最好用WM_SETFONT来处理,我也是在挂钩时打印消息发现了它,直接看MSDN就知道怎么发送了。代码:HBRUSH CSkinEdit::CtlColor(CDC* pDC, UINT nCtlColor){ m_Brush.DeleteObject(); m_Brush.CreateSolidBrush(m_BkClr); pDC->SetBkColor(m_BkClr); pDC->SetTextColor(m_TextClr); return (HBRUSH)m_Brush;}必须return 一个HBRUSH对象,表.
阅读全文
摘要:犯了一个小错,水平滚动时出现文字重影,所以改了下:错误在于,在遍历列时,我用 CRect rcColumn; GetHeaderCtrl()->GetItemRect(i, &rcColumn);这是错误的,因为一旦水平滚动时,这样得到的rcColumn就会不确定,因为rcColumn是得到绘制区域left,right,这两个值不停变化,从而产生文字的重影所以改了下,改用GetColumn,因为它得到的是width,在水平滚动时,width是不会变化的。代码如下: CDC dc; CRect rc; dc.Attach(lpDIS->hDC); rc = lpDIS->
阅读全文
摘要:有时我们在一个区域绘制一张图片,如果强制绘制,会失图片失真,所以自己写了一个简单算法,计算在当前区域下,按图片比例显示的区域为多大,居中代码如下:BOOL MeetRect(CRect &rc, CSize szPic){ int x, y, w, h; int nWidth = rc.Width(); int nHeight = rc.Height(); if(nWidth > 0 && szPic.cx > 0) { // Get Meet Rect if(szPic.cx > nWidth || szPic.cy > nHeight) {
阅读全文
摘要:1.犯了一个错误:Brush(RGB(255,0,0));这样写程序不会报错,然后很悲剧的怎么也显示不出文字,记录下,以后不要再犯了。自己写的示例代码:CPaintDC dc(this); Graphics g(dc.GetSafeHdc()); //--------------------------------------- // fontFamily第一个参数是用来定义 // 宋体、楷体、仿宋、黑体、隶书以及幼圆等多种字样 // 特别说明:Gdi+不支持OpenType字体,吃了一次亏了 //--------------------------------------- F...
阅读全文
摘要:滚动条从有到无,怎么都不消失,仔细跟了下,发现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;
阅读全文
摘要:用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...
阅读全文
摘要:最近绘制老犯同样的错误,记录下: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
阅读全文
摘要:在电脑-属性-高级-性能设置-拖拉时显示窗口内容,如果选中这个框,那么其他窗口在自绘的窗口拖动就很闪,没法了,禁用它,程序关闭后再还原它判断是否这个属性勾上了:BOOL CMTSFrmApp::IsDragFullWindows(){ BOOL bRet = FALSE; if ( ::SystemParametersInfo( SPI_GETDRAGFULLWINDOWS, NULL, &bRet, NULL ) ) { return bRet; } return FALSE;}如是,去掉这个属性: m_bDragFull = IsDragFullWindows(); if (...
阅读全文