運行環境: 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;