100 分 求 GetDlgItem 的详细说明(100分)

  • 主题发起人 qi_jianzhou
  • 开始时间
Q

qi_jianzhou

Unregistered / Unconfirmed
GUEST, unregistred user!
对 getDlgItem 不明白,比如有一个窗体,它的上面的一个 panel, panel 里有一个 button 和 checkbox ,那么 我如何用 GetDlgItem 来取得 button 以及 checkbox 的 handle &nbsp;呢?<br><br>不用别的方法,就用 getDlgItem,请给出详细说明<br><br>得到答案后,马上结贴放分
 
在DELPHI里面我没用过GetDlgItem,在VC里面倒是经常用,比如GetDlgItem(IDC_STOP)-&gt;EnableWindow(FALSE);意思很明显,返回指针~!
 
我的窗体中放一个 panel,<br>我用 h := getDlgITem(form1.handle,0)<br> 取出的 h=0 呀?
 
一般用在从资源文件建立的窗体上<br>下面的例子需要WINXP才能完全体现<br>先定义个RC文件<br>100 DIALOG 0, 0, 160, 50<br>STYLE DS_SETFONT | WS_CAPTION | WS_POPUP | WS_DLGFRAME | NOT WS_SYSMENU<br>CAPTION &quot;载入索引&quot;<br>LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED<br>FONT 9, &quot;宋体&quot;<br>{<br> &nbsp;CONTROL &nbsp; &nbsp; &nbsp; &quot;Animate1&quot;,1001,&quot;SysAnimate32&quot;,0x00000006,15,10,0,0<br> &nbsp;CTEXT &nbsp; &nbsp; &nbsp; &nbsp; &quot;请稍候...&quot;, -1, 12, 12, 110, 8<br> &nbsp;CONTROL &quot;ProgressBar1&quot;,1002,&quot;msctls_progress32&quot;,WS_BORDER | 0x00000001,5,32,150,10<br>}<br><br><br>然后在程序需要时<br>const<br> &nbsp;PBS_MARQUEE &nbsp;= $08;<br> &nbsp;PBM_SETMARQUEE = WM_USER + 10;<br>var<br>hwndDlg &nbsp; &nbsp; &nbsp;: HWND;<br>Modulehandle : HMODULE;<br>begin<br>//载入资源窗体<br>//DialogProc是回掉函数,可以参考SDK的写法<br>hwndDlg:=CreateDialog(HInstance,MAKEINTRESOURCE(100),self.Handle,@DialogProc);<br>Modulehandle:=LoadLibrary('shell32.dll');<br>FreeLibrary(Modulehandle);<br>//SendDlgItemMessage就是getDlgITem和sendmessage结合<br>//对这个窗体1001的控件设置,这里是装载一个动画<br>SendDlgItemMessage(hwndDlg,1001,ACM_OPENA,Modulehandle,151);<br>//对窗体上1002的控件进行设置,设置为winxp支持的滚动条<br>SetWindowLong(GetDlgItem(hwndDlg,1002),GWL_STYLE,GetWindowLong(GetDlgItem(hwndDlg,1002),GWL_STYLE) or PBS_MARQUEE);<br>SendDlgItemMessage(hwndDlg,1002,PBM_SETMARQUEE,1,70);<br>//显示这个窗体<br>ShowWindow(hwndDlg,SW_SHOW);
 
谢谢,我提这个问题是因为我看到了别人介绍的用 getDlgItem 来取 QQ 里输入消息控件的 句柄,而我用这个什么也得不到,所以就想知道该怎么用<br><br>如果想得到 QQ 输入消息文本框里内容该怎么做呢?
 
控件ID号是固定不变的,而控件句柄是由系统分配所以每次都是变化的,DELPHI的VCL将这个值内部处理了,所以在DELPHI里很难体现;<br>如果窗体内所有的控件是通过CreateWindow,CreateWindowEx来创建的则通过hMenu参数来指定控件ID(大多都是VC写的程序)<br><br>至于QQ<br>首先要先写个调试过程<br>大致就是捕捉到QQ的窗口句柄,枚举这个窗口内所有控件的句柄,再调用GetDlgCtrlID获得控件ID号并记下来<br>然后在写外挂的时候就可以调用GetDlgItem(窗口句柄,控件ID号)来获得控件的句柄
 
GetDlgItem(hWnd, ID_Button); //ID_Button在资源文件中定义
 
谢谢各位了,我再试试
 
顶部