windows核心编程(一) -----chSETDLGICONS



chSETDLGICONS宏 作用到底是什么呢?csdn根本没有提及其实和其他的诸如chINRANGE、chDIMOF以及chSIZEOFSTRING一样都是宏巨集。

这里chSETDLGICONS的是对话框图标设置宏,它的作用是关联当前句柄到一个icon图标。


inline void chSETDLGICONS(HWND hwnd, int idi) {
   SendMessage(hwnd, WM_SETICON, TRUE,  (LPARAM)
      LoadIcon((HINSTANCE) GetWindowLongPtr(hwnd, GWLP_HINSTANCE),
         MAKEINTRESOURCE(idi)));
   SendMessage(hwnd, WM_SETICON, FALSE, (LPARAM)
      LoadIcon((HINSTANCE) GetWindowLongPtr(hwnd, GWLP_HINSTANCE),
      MAKEINTRESOURCE(idi)));
}


1.

GetWindowLongPtr


GetWindowLongPtr函数是在指定的窗口中获取信息。也可以在指定window内存 偏移量的情况下获取值。


可以拿这个函数来代替GetWindowLong函数来获取一个指示器或者句柄(注:指示器和句柄是32位或64位 微软windows所特有的概念)。要写一个兼容32位或64位windows版本的代码,就要使用这个函数。
语法:
LONG_PTR GetWindowLongPtr(
HWND hWnd,
int nIndex
);
参数:
hWnd
欲获取信息的窗口(或属于窗口的类)的句柄。
nIndex
为欲获取的信息指定值。可以是以下其中之一。
GWL_EXSTYLE
获取扩展窗口样式。更多信息,查阅CreateWindowEx.
GWL_STYLE
获取窗口样式(window styles)
GWLP_WNDPROC
获取窗口程序指示器,或描述指示器的句柄 。如果使用此参数,必须使用CallWindowProc 回调函数
GWLP_HINSTANCE
获取一个应用程序实例的句柄 。
GWLP_HWNDPARENT
如果只有一个父窗口,获取父窗口的句柄 。
GWLP_ID
获取窗口标识符。
GWLP_USERDATA
获取窗口关联的数据,是应用程序创建窗口时留给用户的数据。初始值是0。
DWLP_DLGPROC
获取一个对话框的指示器,或描述指示器的句柄 。如果使用此参数,必须使用CallWindowProc回调函数。 DWLP_MSGRESULT 获取一个对话框中的被处理的信息的值。
DWLP_USER 作为指示器或句柄来获取私有应用程序的额外的信息。
返回值:
如果函数执行成功,将返回读取的值。
如果执行失败,将返回零,要获取更多扩展信息,请调用GetLastError.
如果SetWindowLong or SetWindowLongPtr没有被事先调用,就在扩展窗口或类内存中调用 GetWindowLongPtr函数,将返回零
详情你也可以查看 MSDN
使用库:User32.DLL


2.

在msdn中无法查找此类宏的描述信息,以下宏均不在msdn中,在WINDOWSX.H中可找到这些红的原型

#define Edit_Enable(hwndCtl, fEnable)           EnableWindow((hwndCtl), (fEnable))

#define Edit_GetText(hwndCtl, lpch, cchMax)     GetWindowText((hwndCtl), (lpch), (cchMax))
#define Edit_GetTextLength(hwndCtl)             GetWindowTextLength(hwndCtl)
#define Edit_SetText(hwndCtl, lpsz)             SetWindowText((hwndCtl), (lpsz))

#define Edit_LimitText(hwndCtl, cchMax)         ((void)SNDMSG((hwndCtl), EM_LIMITTEXT, (WPARAM)(cchMax), 0L))

#define Edit_GetLineCount(hwndCtl)              ((int)(DWORD)SNDMSG((hwndCtl), EM_GETLINECOUNT, 0L, 0L))
#ifndef _MAC

Edit_GetText宏的作用是从第一个参数(一般是对话框)中获取一消息,第二个参数是消息的存储空间,第三个参数是存储空间的容量。例如如下例子:

Edit_GetText(GetDlgItem(hwnd, IDC_REQUEST),
            g_szSharedRequestAndResultBuffer,
            _countof(g_szSharedRequestAndResultBuffer));

_countof()也是个宏在msdn也查不到,它的作用是统计数组元素的个数,包括\0元素,它是个unsigned int 类型,跟 -1 比较时 -1 也自动转换为 unsigned int 类型了。注意:传入宏的参数必须是静态数组名,而不能是指针等。

此类宏均是对windows text的 宏定义,查找相对应的windowtext函数即可msdn可以查找到。


Edit_LimitText

CEdit::SetLimitText

void SetLimitText(UNIT nMax);

参数: nMax 新的文本限制,以字节计算。

说明:
调用此成员函数设置编辑控件中的文本的长度限制。此限制是编辑控件可以接收的以字节形式表示的文本大小。
改变文本限定仅使用户能输入的文本受到限制,而对已在编辑控件中的文本没有影响,也不影响用CWnd中的SetWindowText成员函数能拷贝到编辑控件中的文本的长度。如果用SetWindowText函数输入的文本超过调用LimitText函数所指定的值,则用户可以在编辑控件中删除任何文本,但文本限制会禁止用户将已存在的文本替换为新文本,直到删除当前所选文本而使文本大小降至限制以内。
在Win32中,SetLimitText代替此函数。
要了解更多信息,请参阅Win32文档中的EM_SETLIMITTEXT。

Edit_LimitText(GetDlgItem(hwnd, IDC_ERRORCODE), 5);限制输入5字符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值