运行环境: VC6, 98/NT4
CPopup类
这个类允许你用弹出的方式显示控件。
一个弹出控件当它被聚焦时成为可见的并且它能被显示在程序框架的外面。
示例,你能在一个按钮下面显示一个树控件。看示例工程,了解这个类的其它用法。
执行:
这个CPopup类从CMiniFrameWnd派生。这个类与浮动工具相比有同样的基本框架。当CMiniFrameWnd变为激活状态时,这个类允许一个CFrameWnd或一个CMDIFrameWnd保持激活。看上去象有两个框架在同一时间被激活。
不象CMiniFrameWnd,CPopup没有标题与边界,它只不过是一个包容“弹出”控件的框架。
简单的类描述:
class CPopup : public CMiniFrameWnd
{
public:
bool Display (CWnd* pControl, CWnd* pCaller, CRect& rcCaller, IPopupCtrlEvent* pEvents = NULL);
protected:
CPopup ();
virtual ~CPopup () {};
void EndPopup (bool bAbort = false, bool bSetFocus = true);
DECLARE_DYNCREATE(CPopup)
};
使用方法:
你必需创建一个动态实例,因为毁灭 是自动的。
显示方法是这个类的独特公共方法。
在这之后创建一个CPopup对象(通过 CreateObject方法), 去弹出你的控件。
bool CPopup::Display (CWnd* pControl,
CWnd* pCaller,
CRect& rcCaller,
IPopupCtrlEvent* pEvents = NULL);
第一个参数是你需要弹出的控件,你能指定一个listbox, listctrl, treectrl,
formview, activex, ...
第二个参数能为你指定一个 caller。它通常用来定义弹出窗口的父窗口,这个对象将在弹出操作结束时,用来在它上面实现聚焦。它也可以被设置为NULL。
第三个CRect参数指定了弹出控件在屏幕上的位置。它可能是一个调用者矩形(作为pushbutton)或是一个项的矩形(作为工具按钮)。它不仅仅是一个点,因为它为放置弹出控件应用了一个小小的法则。
缺省时,弹出控件在矩形的左下角,但如果没有足够的位置显示控件,它能够被显示靠在右边并且/或者靠在上边。
弹出的尺寸为显示前的控件尺寸T,它不是一个矩形尺寸。
最后一个参数是指向一个定义一些回调的界面。看下面的描述。
这个方法返回一个布尔变量,指明弹出控件是否被正确的显示。
IPopupCtrlEvent界面
interface IPopupCtrlEvent
{
virtual bool OnInit () = 0;
virtual void OnShow () = 0;
virtual void OnHide (bool bAbort) = 0;
virtual int OnKeyDown (UINT nChar, UINT nRepCnt, UINT nFlags) = 0;
virtual int OnLButtonDown (UINT nFlags, CPoint point) = 0;
virtual int OnLButtonUp (UINT nFlags, CPoint point) = 0;
virtual IPopupCtrlEvent* GetInterfaceOf (HWND hWnd) = 0;