![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
WIN32界面编程
zhuzhubin
本博客只用于学习笔记
展开
-
Windows外壳名字空间的浏览
Windows95/98对Dos/Win3.x作了许多重大改进,在文件系统方面,它除了采用长文件名替代Dos中的8.3文件名以外,引入外壳名字空间(Shell Name Space)来代Dos文件系统是其又一大突破.本文将简要地介绍如何在Windows 95/98或Windows NT4.0以上版本。简介 在Dos/Win3.x中,每个逻辑分区构转载 2009-11-27 22:00:00 · 604 阅读 · 0 评论 -
CTreeCtrl重载类
因为公司项目需要,对CTreeCtrl类进行了重载。效果如图 代码如下:#pragma once#include "afxcmn.h"class COwnerDrawTree : public CTreeCtrl{public: COwnerDrawTree(void); ~COwnerDrawTree(void); void DrawItems( CDC* pDC );pr原创 2009-11-08 22:04:00 · 1232 阅读 · 1 评论 -
模态对话框消息处理机制
摘要:消息驱动机制是Windows操作系统的根本,模态对话框消息处理又是不同于一般消息处理的特殊形式。通过分析这种消息机制的原理,可用来处理类似的程序设计要求。 在Windows操作系统中,面向用户的GUI基本上可分为对话框形式和文档/视图两种表现形式。对话框的显示方式又可分为模态对话框和非模态对话框,以适应不同的用户交互需求。由于对话框和文档/视图框架结构各有特色,能不能将文档/视图框架结构转载 2009-10-20 23:30:00 · 637 阅读 · 0 评论 -
面试题
一道题目“鼠标左键点击在非当前窗口的标题栏上,会产生什么样的win32消息?”。当时感觉有点茫然,不就是WM_LBBUTTONDOWN、WM_ACTIVATE和WM_SETFOCUS吗?后来感觉可能不是这么简单,就用Spy++跟踪了一下,果然多了不少消息。在NC点击发出的消息流程如下: WM_NCHITTEST //在鼠标点击非激活窗体的时候发出的,如果是点在子窗体上,还会通过转载 2009-07-08 19:00:00 · 1076 阅读 · 0 评论 -
从Windows消息的角度看窗口应用程序的运行过程
一个典型的Win32窗口应用程序的框架是这样的: 程序入口点(WinMain函数)-->注册窗口类(调用RegisterClass函数或RegisterClassEx函数)-->创建主窗口(调用CreateWindow函数或CreateWindowEx函数)-->显示主窗口(调用ShowWindow函数)-->更新主窗口(调用UpdateWindow函数)-->进入消息循环(G转载 2009-07-08 18:24:00 · 691 阅读 · 0 评论 -
窗口动画效果
在显示窗体动画效果前,先寻找系统区位置BOOL CALLBACK FindTrayWnd(HWND hwnd, LPARAM lParam){ TCHAR szClassName[256]; GetClassName(hwnd, szClassName, 255); // 比较窗口类名 if (_tcscmp(szClassName, _T("T原创 2009-08-31 14:18:00 · 492 阅读 · 0 评论 -
clistctrl 虚拟列表
一、什么是虚拟列表控件 虚拟列表控件是指带有LVS_OWNERDATA风格的列表控件。。二、为什么使用虚拟列表控件我们知道,通常使用列表控件CListCtrl,需要调用InsertItem把要显示的数据插入列表中,之后我们就不必关心数据在哪里了,这是因为控件自己开辟了内存空间来保存这些数据。现在假设我们要显示一个数据库,里面的信息量很大,有几十万条记录。通常有两种方法解决这个问题:1是转载 2010-05-16 20:18:00 · 740 阅读 · 0 评论 -
解决Windows 程序界面闪烁问题的一些经验
原帖地址:http://blog.joycode.com/yaodong/archive/2004/11/26/39764.aspx一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小的时候出现闪烁。先来谈谈闪烁产生的原因原因一:如果熟悉显卡原理的话,调用GDI函数向屏幕输出的时候并不是立刻就显示在屏幕上只是写到了显存里,而显卡每隔一段转载 2010-05-08 13:19:00 · 865 阅读 · 2 评论 -
依赖设备的位图和 dib 之间转换
若要将一个 DDB 转换为 DIB 使用以下步骤: 初始化 BITMAPINFOHEADER 数据结构。 设置为 sizeof(BITMAPINFOHEADER) biSize。将 biWidth 设置为位图的宽度。将 biHeight 设置为位图的高度。将 biPlanes 设置为 1。设置为乘以 bmBitsPixel 的位图 bmPlanes biBi转载 2010-04-20 15:03:00 · 518 阅读 · 0 评论 -
系统理解Win32 API和MFC 1
Win32 API是微软的操作系统Windows提供给开发人员的编程接口,它决定了我们开发的Windows应用程序的能力。MFC是微软为开发人员提供的类库,在某种意义上是对Win32 API的封装。本文试图从全局角度对Win32 API和MFC进行理解──给出二者的概念模型。 本文使用UML描述概念模型。Win32 API本不是面向对象的,我用面向对象的观点去理解它,转载 2009-12-23 17:59:00 · 548 阅读 · 0 评论 -
获取桌面窗口的句柄
GetDestopWindow取到的是桌面窗口的句柄,但不是我们所看到的那个包含图标的窗口。包含图标的窗口实际上是DesktopWindow的一个字窗口。确切地讲,Desktop Window包含一个无标题的、类名为“SHELLDLL_DefView”的子窗口,这个字窗口又包含一个无标题的、类名为“SysListView32”的子窗口——这才是那个真正包含桌面图标的窗口。转载 2009-12-15 16:57:00 · 4951 阅读 · 0 评论 -
CListCtrl使用技巧
以下未经说明,listctrl默认view 风格为report1. CListCtrl 风格 LVS_ICON: 为每个item显示大图标 LVS_SMALLICON: 为每个item显示小图标 LVS_LIST: 显示一列带有小图标的item LVS_REPORT: 显示item详细资料 直观的理解:windo转载 2009-12-10 10:06:00 · 502 阅读 · 0 评论 -
利用IE 实现Web 页面截图
1. 目的 在Codeproject 中看到有人做这个, 稍微做了下修改, 做成了命令行的, 使用方法是 iesnap.exe url filename 用以抓取 URL 对于的Web, 并且将Web 的截图保存在Filename 中. url : 要截图的网址 filename: 截图保存文件名 2. 思路 主要使用WebBrows转载 2010-02-02 21:56:00 · 2502 阅读 · 1 评论 -
MFC窗口销毁过程
考虑单窗口情况: 假设自己通过new创建了一个窗口对象pWnd,然后pWnd->Create。则销毁窗口的调用次序: 1. 手工调用pWnd->DestroyWindow(); 2. DestroyWindow会发送WM_DESTROY; 3. WM_DESTROY对应的消息处理函数是OnDestroy(); 4. DestroyWindow会发送WM_NC原创 2009-06-24 23:40:00 · 410 阅读 · 0 评论 -
CHtmlView的通信机制
IWebBrowser2是microsoft提供的web浏览器控件, 它也是IE使用的内核,功能非常强大。在http客户端程序中,使用IWebBrowser2可以简化对http通信过程的处理,并将html文档解析成一个对象结构。IWebBrowser2是一个ActiveX控件和COM接口,直接使用比较复杂。CHtmlView是MFC对IWebBrowser2的封装,提供了更为简化的编程模型。尽管如转载 2009-06-25 22:35:00 · 2263 阅读 · 0 评论 -
WM_PARENTNOTIFY
当子窗口被建立,销毁或用户单击鼠标键时,WM_PARENTNOTIFY被发送使用如下:LRESULT WINAPI xxx_WndProc(HWND hwnd,UINT uMsg, WPARAM wParam,LPARAM lParam)...{ switch(uMsg)...{ HANDLE_MSG转载 2009-07-27 14:15:00 · 3501 阅读 · 0 评论 -
BeginDeferWindowPos
HDWP hdwp = BeginDeferWindowPos(2); hdwp = DeferWindowPos( hdwp, hStatic, NULL, 0, 0, 100, 20, SWP_NOACTIV转载 2009-07-23 23:13:00 · 2180 阅读 · 0 评论 -
_TrackMouseEvent
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Font转载 2009-07-21 18:02:00 · 2490 阅读 · 0 评论 -
WM_NCHITTEST消息说明
当光标移动到窗体,或鼠标按下,释放时,发送WM_NCHITTEST消息,如何鼠标不被捕获,消息在窗体得到光标之后发出,否则,消息发送到捕获到鼠标的窗体。 WM_NCHITTEST xPos = LOWORD(lParam); // 光标的水平位置(X)yPos = HIWORD(lParam); //光标的垂直位置(Y) Parameters(参数) xPos lP转载 2009-07-17 14:20:00 · 1648 阅读 · 0 评论 -
如何做出mouse over效果以文找文
在很多語言中 都會提供mouse over 效果例如當我們滑鼠移到一個按鈕上面 按鈕就會變亮 然後移走之後 又變回原樣然而這功能在VC++中好像都看不到那在VC++中應該要如何做出這功能呢要做出這功能 當然就需要知道兩個時間點就是滑鼠移入以及滑鼠移出的時候 滑鼠移入這非常容易只要在OnMouseMove()中偵測即可不過MFC中並沒有OnMouseL转载 2009-07-17 14:15:00 · 570 阅读 · 0 评论 -
利用CImage进行屏幕截图
思路:(1)获取当前顶层窗口(即屏幕)(GetDesktopWindow)(2)获取当前顶层窗口的绘图设备(CWindowDC)(3)创建内存图像(4)将当前顶层窗口图像复制到内存图像中(5)保存图像Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlight转载 2009-07-14 16:58:00 · 688 阅读 · 0 评论 -
非模态对话框相对于模态对话框,他的创建和销毁过程和模态对话框有一定的区别
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Font转载 2009-04-15 10:15:00 · 490 阅读 · 0 评论 -
WinAPI: GetRegionData
GetRegionData( RGN: HRGN; {区域句柄} p2: DWORD; {区域数据缓冲区大小} p3: PRgnData {区域数据结构 TRgnData 的指针, 见下表}): DWORD; {成功返回 1}//TRgnData 是 _RGNDATA 结构的重命名:_RGNDATA = record rdh: TRgnDataHeader;转载 2008-11-14 10:08:00 · 592 阅读 · 0 评论 -
解决窗口刷新闪烁
一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小的时候出现闪烁。 先来谈谈闪烁产生的原因 原因一:如果熟悉显卡原理的话,调用GDI函数向屏幕输出的时候并不是立刻就显示在屏幕上只是写到了显存里,而显卡每隔一段时间把显存的内容输出到屏幕上,这就是刷新周期。 一般显卡的刷新周期是 1/80秒左右,具体数字可以自己设置的。 这转载 2008-11-07 16:20:00 · 1370 阅读 · 0 评论 -
锁定窗口更新
在冗长和粒状的操作中更新窗口时的一个典型难题就是窗口闪烁,改变控件内容导致反复重画控件可见区域的部分或全部。当短时间内这样的更新大量发生时,这就成问题了,而且这种反复重画是以一种无任何吸引力的可视干扰形式出现的。解决这一难题的两种常用方法是使用API函数LockWindowUpdate和WM-SETREDRAW消息。LockWindowUpdate通过换出此窗口的正常设备场景(device c转载 2009-07-28 17:52:00 · 996 阅读 · 0 评论 -
使窗体拥有透明效果的API
一、背景FlashGet的透明效果大家羡慕吧.传统的Windows应用程序想实现半透明效果,一般来说需要处理自己的窗口的WM_Paint消息窗口,很麻烦.现在好了,SetLayeredWindowAttributes是windows的新api,win2000以上才支持,它能使使窗体拥有透明效果.我在Google搜了下,介绍SetLayeredWindowAttributes的文章大转载 2009-06-24 17:54:00 · 496 阅读 · 0 评论 -
客户区也能移动整个窗口实现
void CMainFrame::OnLButtonDown(UINT nFlags, CPoint point) { if (!IsZoomed() && !IsIconic()) { SendMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y)); }原创 2009-08-25 09:43:00 · 367 阅读 · 0 评论 -
ListCtrl 使用技巧
CListCtrl 使用技巧 以下未经说明,listctrl默认view 风格为report相关类及处理函数MFC:CListCtrl类SDK:以 “ListView_”开头的一些宏。如 ListView_InsertColumn --------------------------------------------------------------------------转载 2009-06-08 22:31:00 · 706 阅读 · 0 评论 -
画框
画框的代码HWND hWndDesk = ::GetDesktopWindow(); HDC DeskDC = ::GetWindowDC(hWndDesk); //取得桌面设备场景 int oldRop2 = SetROP2(DeskDC, /*R2_NOTXORPEN*/R2_NOTXORPEN); HPEN newPen = ::CreatePen(0, 3, 0); //建立新画笔,载原创 2009-08-12 17:40:00 · 493 阅读 · 0 评论 -
在 Visual C++ 中开发自定义的绘图控件
本文讨论的重点介于两者之间 — 公共控件赋予您想要的大部分功能,但控件的外观并不是您想要的。例如,列表视图控件提供在许多视图风格中显示数据列表的方式 —小图标、大图标、列表和详细列表(报告)。然而,如果您想要一个网格控件,那结果怎样呢?尽管公共控件库里没有特别包含网格,但是列表视图控件与它较为接近,它以行和列显示数据,并有一个相关的标头控件。因此,许多人以一个标准的列表视图控件为起点创转载 2009-06-03 16:30:00 · 792 阅读 · 0 评论 -
有关图像处理
HBITMAP CreateBitmapFromIcon(HICON icon,int w,int h){ CDC dc; dc.CreateCompatibleDC(NULL); HDC desk=GetDC(GetDesktopWindow()); HBITMAP bmp=CreateCompatibleBitmap(desk,w,h);原创 2009-06-04 16:07:00 · 405 阅读 · 0 评论 -
位图变灰
void CGrayView::Gray(CBitmap* pBmp){ CClientDC dc(this); CDC memDC; memDC.CreateCompatibleDC(&dc); CBitmap* pOldBmp=memDC.SelectObject(pBmp); BITMAP sizeBmp;原创 2009-07-31 09:47:00 · 559 阅读 · 0 评论 -
浏览功能
void CCaptureDlg::OnBrowse() { CString str; BROWSEINFO bi; char name[MAX_PATH]; ZeroMemory(&bi,sizeof(BROWSEINFO)); bi.hwndOwner=GetSafeHwnd(); bi.pszDisplayName=name;原创 2009-07-29 17:47:00 · 368 阅读 · 0 评论 -
支持换肤功能的窗口实例
支持换肤功能的窗口实例这个例子展示了如何绘制定制(自绘)窗口框架(包括标题、边框等)。 一、前言如今,支持定制皮肤功能的软件越来越流行。这样用户就可以自己修改程序的外观。甚至Windows操作系统本身做到这点了。Windows XP提供的主题(theme)技术可以修改窗口、按钮、滚动条等的外观。最近,我想用MFC设计一个可以换肤的程序。在网上我没有搜索转载 2008-10-13 15:37:00 · 876 阅读 · 1 评论