Win32 API笔记

来源:互联网 发布:web域名注册免费 编辑:程序博客网 时间:2024/06/04 00:22

1>创建一个非模式对话框:

 

2>创建一个静态文本控件:

 

 

3>在对话框上显示一张图片:

 

4>将TextOut输出的文字背景色设为透明:

 

5>获取屏幕的宽度与高度:

 

6>创建一个简单的系统托盘:

 

7>创建一个mask图片(用于遮罩的, 第8条是它的用法):

 

8>去掉图片的黑色边框:

没有遮罩的图片

有遮罩的图片

 

9>"SYS"代表系统,它表示该击键对Windows比对Windows应用程序更加重要。

 

10>“死键”用于给字母加上音调,它们本身不产生字符。

 

11>格式化一个宽字符串用wsprintf(...);
求宽字符串的长度用wcslen(...);

 

12>0xC0000005: 写入位置 0xcccccccc 时发生访问冲突的疑问。很可能是某个变量没有设置为static

 

13>volatile修饰符的作用是告诉优化器不能优化这个变量的读写操作,一定要为这个变量的读写
  操作生成代码。例如:

  在无volatile修饰的情况下,因为变量i的变化对上下文无影响,所以优化器很可能会省略掉对i操
  作的代码,而只生成return 0的代码,加上volatile可以保证编译器一定为语句(a)和(b)生成代
  码,达到延时的目的。

 

14>PostMessage 是异步的,SendMessage 是同步的。
 PostMessage 只把消息放入队列,不管消息是否被处理就返回,消息可能不被处理;而 SendMessage 等  待消息被处理完了之后才返回,如果消息不被处理,发送消息的线程将一直被阻塞。

 

15>兼容DC是为了实现双缓冲,先将资源拷贝到一个缓冲区,然后一个性拷贝到客户区。如果不用双缓冲的话  直接拷贝,会造成客户区抖动很厉害。

 

16>”纯资源“指含数据不含代码。

 

17>线程局部存储(TLS)区别于全局变量、静态变量、局部动态变量,它是唯一于各个线程的持久性存储。

 

18>1.GetMessage()只有在接收到消息后才将控制权转给你的程序,而PeekMessage()无论有没有消息都会将  控制权转给你的程序:如果有消息,返回真,没有消息返回假。
  2.GetMessage()的主要功能是从消息队列中“取出”消息,消息被取出后,消息队列中就不再由该消息了;  而PeekMessage()的主要功能是“窥视(peek)”消息,如果有消息,返回真,没有返回假。但      PeekMessage()  允许你从消息队列中“取出”消息,这就是PeekMessage()第四个函数的用途:如果选用PM_REMOVE,则消息    从队列中取出,如选用PM_NOREMOVE,则PeekMessage()则“文如其人”,只是“偷看”,而保留消息。
  3.GetMessage()每次都“等待处理消息”而PeekMessage()只是“察看有无消息”。

 

19>打开、关闭外部应用程序(注意:获取句柄时需要应用程序左上角的名字)

 

20>ShellExecute打开网页
ShellExecute是我们常用的一个API,可以运行程序,打开网页。
ShellExecute(NULL, "open", "http://www.slyar.com/", NULL,NULL,SW_SHOWMAXIMIZED);
这样可以打开一个网页,但不是在新IE中打开,改成下面方式时就可以在一个新的IE中打开网页了
ShellExecute(NULL, "open", "IEXPLORE", "http://www.slyar.com/", NULL,SW_SHOWMAXIMIZED);

 

21>WTL支持中文
1)在资源视图中将对话框属性中的Language改为中文;
2)在属性对话框中将对话框的Font(Size)改为宋体;

 

22>CListViewCtrl m_ctrl;
m_ctrl.SetExtendedListViewStyle(LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES);
支持一行全选和check按钮

 

23>解决error PRJ0002
VS2008:
工具(Tools)菜单 -- 导入导出设置(Import and Export Settings...) -- 重置所有选项(Reset all settings) -- 否,不保存设置(最后一个) -- 选择你的设置 比如Visual C# 开发设置(Visual C# Development Settings) -- 完成(Finish)

 

24>解决WTL中CString与ATL中CString的问题:
在#include <atlapp.h>的前面写下如下代码:
#define _WTL_NO_CSTRING
#include <atlstr.h>

25>文件对话框

// 第一个参数TRUE为打开, FALSE为保存CFileDialog importFile(TRUE, "txt", NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"(*.txt)|*.txt|(所有文件)|*.*||", NULL);if (importFile.DoModal() == IDOK){}

26>读写文件

CStdioFile sFile;if (!sFile.Open(strFilePath, CFile::modeRead)){MessageBox("打开文件失败");return;}

27>
// CMapStringToString用法CMapStringToString m_mapDeviceItem;POSITION pos;CString strFirst, strSecond;for (pos=m_mapDeviceItem.GetStartPosition(); pos1!=NULL; ){m_mapDeviceItem.GetNextAssoc (pos, strFirst, strSecond);}// CList用法// 头文件#include <afxtempl.h>CList<CString, CString&> m_listDeviceItem;POSITION pos;for (pos=m_listDeviceItem.GetHeadPosition(); pos!=NULL; ){CString strTemp = m_listDeviceItem.GetNext(pos);}

原创粉丝点击