将子窗体(或按钮)附到别的软件的界面上(270分)

  • 主题发起人 主题发起人 李亚平
  • 开始时间 开始时间

李亚平

Unregistered / Unconfirmed
GUEST, unregistred user!
我想写一个小工具,需要将我的一个子窗体或者按钮附在别的软件窗体上(比如说快捷工具条,或者一个类似TP97的菜单条),用户一按下按钮,这个小工具就能够完成功能
 
这得那个软件同意吧?
比如想在word中插入按钮,就要调Word Basic,或者用OLE Auto,实质是一样的。
当然你可以硬让你的按钮(其实应该是个窗口)显示在那个软件的特定位置,Hook
那个软件的Move,Maximize等消息,做到如影随形,让用户看不出是'粘'上去的。
//好像挺有趣的...
 
知道怎么做花哨的TitleBar吗?(就是window上面那条兰色的)它就是把个窗口贴在
原来该是Title的地方,只要监视WM_MOVE, WM_MOVING, WM_SIZE就能实现了
 
>知道怎么做花哨的TitleBar吗?(就是window上面那条兰色的)它就是把个窗口贴在
>原来该是Title的地方,只要监视WM_MOVE, WM_MOVING, WM_SIZE就能实现了
嗯,这样的控件我也收藏了几个。可那是自己的窗口呀。贴在其他程序上的按钮还没有
吧?恐怕要做Message Hook 了。
 
用Fn*.*监视所有的Message,画一个窗体或做一个无窗体的按钮,激活显示,
其他不用说了吧。
 
用VC++可以做到,但是我不会用DELPHI做.
c 的源程序:
::MoveWindow(m_hWnd,900,0,40,40,TRUE);//将你的子窗体移动到合适的位置
m_hWnd是想贴过去的子窗体的句柄
::SetParent(m_hWnd,HWND(0x52c));//HWND(0x52c)目的窗体的句柄;
okey.
在DELPHI时,SetParent我不知道如何将句柄handle转换成twincontrol类型.
 
挂hook
while Truedo
begin
if 要贴的窗口激活 then
以激活状态显示你的窗体;
end;
这应该可以吧。
 
在Delphi自己的程序中是十分简单的, 只要改变某个控件的parent属性就行了, 比如
把一个form2中的Button1移动到Form1中来:
1. 新建一个App, 默认有一个Form1, 在Form1中加一个Button1
2. 再新建一个form2, 在Form2中也加一个Button1
3. 在Unit1中的uses后面加上Unit2
4. Form1的Button1Click事件如下:
procedure TForm1.Button2Click(Sender: TObject);
begin
Form2.Button1.parent:=Form1;
Form2.Button1.Left := 20;
Form2.Button1.Top:=100;
end;
 
用API函数CreateWindow应该能够在相应的Window下直接建立Control, 在做一个
服务程序或者hook截获发个这个Control的WM_COMMAND消息做相应的处理
 
To huizhang :真神奇呀!?
 
会长:能说清楚点吗? 不明白, 我沉默,你们使劲吧:)
 
还要怎样说才算明白? 请看CreateWindow的帮助.
 
此问题已经堆积超过一个月了,请结束问题或继续讨论 :)
 
多人接受答案了。
 
后退
顶部