windows程序设计POPPAD3的关键难点详解(二)

好了,我们继续,看下面的一段:

SendMessage (hwndEdit, EM_GETSEL,(WPARAM) &iSelBeg,(LPARAM) &iSelEnd) ;
iEnable = iSelBeg != iSelEnd ? MF_ENABLED : MF_GRAYED ;
EnableMenuItem ((HMENU) wParam, IDM_EDIT_CUT,   iEnable) ;
EnableMenuItem ((HMENU) wParam, IDM_EDIT_COPY,  iEnable) ;
EnableMenuItem ((HMENU) wParam, IDM_EDIT_CLEAR, iEnable) ;
break ;

先看SendMessage (hwndEdit, EM_GETSEL,(WPARAM) &iSelBeg,(LPARAM) &iSelEnd) ;这一句,一般人看了之后,马上会想到这是SendMessage向一个句柄为hwndEdit的窗口发送一个EM_GETSEL消息,而这个EM_GETSEL消息有两个附加信息,就是后面那两个参数,这是一个典型的人为的向窗口发送消息的操作。但仔细想想对吗?貌似哪儿不对呀,首先看后面的那两个参数都带着取地址符&,咦,以前这种向窗口发消息的后两个参数可没带这种符号呀?当然这还不是最主要的,最主要的是看看这个指令的意思,查百度和MSDN:

百度:EM_GETSEL(&HB0=176),0,变量 获取光标位置(以字节数表示),或:(缓冲区起点,缓冲区终点)取得编辑控件中选定内容的范围,返回值中低16位为起点,高16位为终点

MSDN:This message retrieves the starting and ending character positions of the current selection in an edit control.(这个消息取回一个编辑控件中选的内容的首字位置和末字位置)

EM_GETSEL 

    wParam = (WPARAM)(LPDWORD) lpdwStart;
    lParam = (WPARAM)(LPDWORD) lpdwEnd;

lpdwStart
Long pointer to a 32-bit value that receives the starting position of the selection. This parameter can be NULL.

(一个指向某32位的接收所选内容的开始位置的值的长指针,这个参数可以是NULL)

lpdwEnd

Long pointer to a 32-bit value that receives the position of the first nonselected character after the end of the selection. This parameter can be NULL.(一个指向某32位的接收所选内容后面第一个字位置的值的长指针,这个参数可以是NULL)

Return Value
The return value is a zero-based 32-bit value with the starting position of the selection in the low-order word and the position of the first character after the last selected character in the high-order word. If either of these values exceeds 65,535, the return value is –1.

返回值

这个返回值是一个无正负的32位值,它的低位存所选内容的开始的位置,高位存所选内容后面的内容的第一个字符位置,这两个值中任一个超了65535,就返回-1


好了,看到上面你就会发现,SendMessage (hwndEdit, EM_GETSEL,(WPARAM) &iSelBeg,(LPARAM) &iSelEnd) ;按理上面的意思应该是取得了所选内容的位置,然后把它的位置信息存在后面的两个参数里,这里就出疑问,在以往的经验中,SendMessage函数最后两个参数不是发送消息的附加信息吗?怎么到这儿变成了接收取回信息的东西了,这不合常理呀?其实这就是对SendMessage函数不了解,SendMessage确实有这样一个新功能,用它可以取得某些信息,并存于后面两个参数中,也就是这里后面的那两个参数并不是做为EM_GETSEL附加信息一同被发出去,而是用来接收传回来的信息。

就是说SendMessage (hwndEdit, EM_GETSEL,(WPARAM) &iSelBeg,(LPARAM) &iSelEnd) ;取得了所选内容的第一个字符的位置信息和所选内容后面的内容的第一个字符的位置信息,然后把前一个位置信息放入&iSelBeg指针指向的存储单元,就是iSelBeg变量,把后一个位置信息放入&iSelEnd指针指向的存储单元,也就是iSelEnd变量。

好了,就到这里了,后面的那几行就不说了,我们主要是讲一些难点,而不是每个地方都讲,因为每个地方都讲,太麻烦,你们看也是浪费时间,所以只讲一些难点,嗯,就到这里了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值