分类: Windows平台
2014-01-03 20:39:51
一、Edit_LimitText
#define Edit_LimitText(hwndCtl, cchMax)
((void)SNDMSG((hwndCtl), EM_LIMITTEXT, (WPARAM)(cchMax), 0L))
#define SNDMSG ::SendMessage
功能描述:设置Edit控件字符最大宽度
->include
二、MAKELANGID
#define MAKELANGID(p, s) ((((WORD )(s)) << 10) | (WORD )(p))
功能:设置语言标识
DWORD systemLocale = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL);
LANG_NEUTRAL与SUBLANG_NEUTRAL两个常量联合起来将生成一个0值,即操作系统默认语言。
三、FormatMessage
DWORD FormatMessage(
DWORD,
LPCVOID,
DWORD,
DWORD,
LPTSTR,
DWORD,
va_list*
);
功能:格式化一个信息字符串
编写练习时一点小心得:
a. SetClassLongPtr(HWND, GCL_HICON, (LONG)hIcon); 更改或设置对框架左上角的小图标, 此函数还有别的功能, 详见MSDN
b. I. HANDLE_MSG(HWND, MSG, MSG_PROC) 宏, 通过此宏可以简化窗体过程函数中复杂的switch 函数结构, 例:
HANDLE_MSG(hwnd, WM_COMMAND, OnCommand) 展开后为: HANDLE_WM_COMMAND(hwnd, OnCommand),具体MSG_PROC 原型见:
windowsx.h 中查找类似HANDLE_WM_COMMAND的宏可找到对应消息的处理函数原型。
II.FORWARD_WM_COMMAND(HWND, CTRL_ID, CTRL_HWND, CODE_NOTIFY, FUNCTION) 宏, 本宏主要功能是向指定控件发送特定的
COMMAND事件, windows还提供类似其他的消息转发宏
以上宏被包涵在: windowsx.h 头文件中
c. OutputDebugString(LPTSTR) 在调试时跟踪一些参数信息是可用到, 此信息被显示到VS的输出视图窗体中.
意外收获:
在Visual Studio 中的Watch视窗中写入@err.hr 单步调试时可查看每一个windows API函数执行后的结果(成功的或失败时的错误代码和错误文本描述)
A P I宏可以简化某些常用的操作,如建立一种新字体,选择字体到设备环境,保存原来字体的句柄。代码的形式如下:
HFONT hfontOrig = (HFONT)SelectObject(hdc, (HGDIOBJ)hfontNew);
这个语句要求两个转换以得到没有编译警告错误的编译。在WindowsX . h中有一个宏,正是为了这个用途而设计:
#define SelectFont(hdc, hfont) /
((HFONT)SelectObject((hdc), (HGDIOBJ)(HFONT)(hfont)))
如果你使用这个宏,你的程序中的代码行就变成:
HFONGT hfontOrig = SelectFont(hdc, hfontNew);
这行代码更容易读,也不容易出错。
FORWARD_WM_*宏将分流开的消息参数重新构造成等价的wParam和lParam。然后这个宏再调用你提供的函数。在上面的例子中,宏调用DefWindowProc函数,但你可以简单地使用SendMessage或PostMessage。实际上,如果你想发送(或登记)一个消息到系统中的任何窗口,可以使用一个FORWARD_WM_*宏来帮助合并各个参数。
在WindowsX.h中还有其他一些API宏,有助于常用的Windows任务。建议读者了解并使用这些宏。