星期四, 十月 12, 2006

WINX中如何动态创建窗口?

现在,我们回答smithfox提的第二个问题:如何在MyCustomControl中再实现,鼠标右键处动态生成一个AnotherMyCustomControl,进行操作后消失,回来MyCustomCon­trol呢?

这个问题包含三个要点:

  • 如何响应鼠标右键点击消息?你可以响应OnRButtonDown,或者OnContextMenu。
  • 如何动态创建窗口(控件)?
  • 如何让控件的行为像菜单一样,鼠标点击到本控件之外就消失?你可以让控件捕获鼠标消息(SetCapture),从而可以获得本控件外的鼠标消息(OnLButtonDown),并在检测到鼠标消息发生在窗口外时销毁自己(DestroyWindow)。

WINX强调的是可视化,因此一直以来,均未提及动态创建窗口这个话题。要动态创建窗口,可以有三种方式:

  • 使用Windows API:CreateWindow/CreateWindowEx。其实对话框就是通过这种方式创建它的子控件的。
  • 使用窗口句柄类(winx::WindowHandle)的Create函数。
  • 使用窗口类自身的Create函数。

后两者Create函数只是对Windows API - CreateWindowEx的简单包装。这里我们给一个动态创建IE控件的例子

没有评论: