Windows核心编程——第一章

来源:互联网 发布:java static final区别 编辑:程序博客网 时间:2024/04/19 13:46

一、Edit_LimitText

#define  Edit_LimitText(hwndCtlcchMax

((void)SNDMSG((hwndCtl), EM_LIMITTEXT, (WPARAM)(cchMax), 0L))

#define  SNDMSG  ::SendMessage

功能描述:设置Edit控件字符最大宽度

->include<windowsx.h>

二、MAKELANGID

#define MAKELANGID(ps)       ((((WORD  )(s)) << 10) | (WORD  )(p))

功能:设置语言标识

DWORD systemLocale = MAKELANGID(LANG_NEUTRALSUBLANG_NEUTRAL);

LANG_NEUTRALSUBLANG_NEUTRAL两个常量联合起来将生成一个0值,即操作系统默认语言。

三、FormatMessage

DWORD FormatMessage(

  DWORDdwFlags

  LPCVOIDlpSource,

  DWORDdwMessageId,

  DWORDdwLanguageId,

  LPTSTRlpBuffer,

  DWORDnSize,

  va_list*Arguments

);

功能:格式化一个信息字符串

编写练习时一点小心得:

    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_*宏将分流开的消息参数重新构造成等价的wParamlParam。然后这个宏再调用你提供的函数。在上面的例子中,宏调用DefWindowProc函数,但你可以简单地使用SendMessagePostMessage。实际上,如果你想发送(或登记)一个消息到系统中的任何窗口,可以使用一个FORWARD_WM_*宏来帮助合并各个参数。 


WindowsX.h中还有其他一些API宏,有助于常用的Windows任务。建议读者了解并使用这些宏。

原创粉丝点击