SendMessage(hwndEdit,EM_GETSEL,(WPARAM) &iSelBeg,(LPARAM) &iSelEnd) ;是什么
SendMessage(hwndEdit,EM_GETSEL,(WPARAM) &iSelBeg,(LPARAM) &iSelEnd) ;在windows程序设计中的POPPAD3中一段代码,弄不明白,在网上搜的资料很乱
首先,在百度百科和MSDN中查到的信息大致为:获取光标的位置或取得编辑控件中选定内容的范围,
其中WPARAM是选的内容开始的位置,LPARAM是选的内容结束的位置,返回值中低16位为起点,高16位为终点
这也太乱了吧,首先SendMessage(hwnd,EM_GETSEL,WPARAM,LPARAM) ;在MSDN中查到WPARAM是选的内容开始的位置,LPARAM是选的内容结束的位置,咦?不对呀,SendMessage不是向窗口发送消息的吗,然后系统在把要获得的选的内容的位置发回来,但问题是这怎么还没等系统把要选的位置的内容发回来了,SendMessage(hwnd,EM_GETSEL,WPARAM,LPARAM) ;中的WPARAM就已经是选的内容开始的位置,LPARAM就已经是选的内容结束的位置,也就是说SendMessage(hwnd,EM_GETSEL,要选内容开始位置,要选内容的开始位置) ;发给系统,系统再把要选内容的开始和结束位置发回来,这不是白忙活吗,已经知道要选内容的开始位置和结束位置了,还用在发给系统求了吗?
难道是SendMessage(hwnd,EM_GETSEL,WPARAM,LPARAM) ;发给系统后,系统会把SendMessage(hwnd,EM_GETSEL,WPARAM,LPARAM) ;中的WPARAM设为要选内容的开始位置,LPARAM设为要选内容的结束位置?但这时这个消息还能用吗?
第二个问题,网上说SendMessage有返回值,我没看错吧,这个只是把消息发给某个窗口的函数有返回值?
第三个问题,在这个程序中,SendMessage(hwndEdit,EM_GETSEL,(WPARAM) &iSelBeg,(LPARAM) &iSelEnd) ;中的iSelBeg和iSelEnd被定义为了int,而且使用之前没有做任何初始化,本身也不是全局变量或静态变量那种默认为0的变量,这种没初始化就用是不是有问题呀?还有(WPARAM) &iSelBeg,(LPARAM) &iSelEnd,这两个变量干嘛都带着取地址符&干嘛?
第四个问题,我猜想,这个SendMessage(hwndEdit,EM_GETSEL,(WPARAM) &iSelBeg,(LPARAM) &iSelEnd) ;是不是把要选内容的初位置存在了iSelBeg变量,末位置存在了iSelEnd,SendMessage居然还有这个功能?SendMessage不就是给窗口发消息的吗?通常都是SendMessage(hwnd,WM_???,WPARAM,LPARAM) ;,其中WM_???是某个消息,WPARAM,LPARAM是这个消息的附加信息,什么时候变成了SendMessage(hwndEdit,EM_GETSEL,(WPARAM) &iSelBeg,(LPARAM) &iSelEnd) ;,一边给窗口发信息,一边初始化某个变量的值了,这里的(WPARAM) &iSelBeg,(LPARAM) &iSelEnd按这个理解显然也不是这个消息的附加信息,而是对变量的一个操作,是不是这样啊?