?? fg_window.h
字號(hào):
/*--------------------------------------------------------------------------
FG_Window.h - 窗口類(lèi)的頭文件
本程序是FishGUI軟件的一部分
版權(quán)所有 (C) 2003,2004 王詠武
http://www.contextfree.net/wangyw/
----------------------------------------------------------------------------
作者對(duì) FishGUI 軟件及其所有源代碼授權(quán)如下:
允許任何個(gè)人、組織、機(jī)構(gòu)、企業(yè)無(wú)償獲得、修改、使用、重新發(fā)布 FishGUI 軟
件及其源代碼,或按照有償或者無(wú)償?shù)姆绞桨l(fā)行基于 FishGUI 源代碼的全部或部
分內(nèi)容開(kāi)發(fā)的軟件產(chǎn)品,——但行使以上權(quán)利時(shí),須遵守以下約定:
1、重新發(fā)布 FishGUI 軟件及其源代碼時(shí),不得隱去軟件及其源代碼中原有的版
權(quán)信息和開(kāi)發(fā)者標(biāo)識(shí)。
2、發(fā)行基于 FishGUI 源代碼的全部或部分內(nèi)容開(kāi)發(fā)的軟件產(chǎn)品時(shí),必須在產(chǎn)品
的顯著位置標(biāo)明以下字樣:
【本產(chǎn)品的一部分功能是基于王詠武在 FishGUI 軟件中的工作完成的】
3、在正式出版物中引用 FishGUI 的文檔、源代碼或注釋內(nèi)容的,應(yīng)注明軟件的
原作者為王詠武。
--------------------------------------------------------------------------*/
/*! \addtogroup Framework
* @{
*/
/*! \file
* \brief 窗口類(lèi)的頭文件
*
*/
#ifndef FG_WINDOW_H_HEADER_INCLUDED_C0AD431E
#define FG_WINDOW_H_HEADER_INCLUDED_C0AD431E
#include "../Utility/FG_Utility.h"
#include "FG_Container.h"
#include "FG_Widget.h"
#include "FG_KeyMap.h"
//##ModelId=3F52B6BD00A5
/*! \brief 窗口類(lèi)
*
* 該類(lèi)的派生類(lèi)可以放置在屏幕上作為窗口,窗口中可以容納各種不同的控件
*/
class FG_Window : public FG_Container
{
public:
//##ModelId=3F5838220352
/*! \brief 構(gòu)造函數(shù)
*
* 當(dāng)前有焦點(diǎn)的控件指針\ref m_pFocus被設(shè)置為\ref NULL
*
* \param title 窗口標(biāo)題,以0結(jié)束的字符串
* \param wID 窗口的唯一標(biāo)識(shí),缺省值為0
* \param wStyle \ref Style
*/
FG_Window(const char * title, const WORD wID = 0, const WORD wStyle = FS_NONE)
: m_Title(title), m_pFocus(NULL), FG_Container(wID, wStyle)
{}
//##ModelId=3F58382201CB
/*! \brief 構(gòu)造函數(shù)
*
* 當(dāng)前有焦點(diǎn)的控件指針\ref m_pFocus被設(shè)置為\ref NULL
*
* \param title 窗口標(biāo)題,以0結(jié)束的字符串
* \param Rect 窗口占據(jù)的矩形元素
* \param wID 窗口的唯一標(biāo)識(shí),缺省值為0
* \param wStyle \ref Style
*/
FG_Window(const char * title, const FG_Rect & Rect, const WORD wID = 0, const WORD wStyle = FS_NONE)
: m_Title(title), m_pFocus(NULL), FG_Container(Rect, wID, wStyle)
{}
//##ModelId=3F5B470501FA
/*! \brief 在窗口中添加一個(gè)控件
*
* 控件之間一般不能重疊,如果有重疊,后添加的控件覆蓋以前添加的控件,焦點(diǎn)被切換到剛添加的控件
*
* \param pWidget 要添加的控件指針
* \return 添加操作是否成功\n
* true 成功\n
* false 失敗
*/
bool AddWidget(FG_Widget * const pWidget);
//##ModelId=3F5B47050240
/*! \brief 從窗口中刪除一個(gè)控件
*
* 如果刪除的是當(dāng)前焦點(diǎn)控件,把焦點(diǎn)指針置為\ref NULL,之后,用戶需要自己調(diào)整焦點(diǎn)
* \param pWidget 要?jiǎng)h除的控件指針
* \return 刪除操作是否成功\n
* true 成功\n
* false 失敗
*/
bool RemoveWidget(FG_Widget * const pWidget);
//##ModelId=3F6193A800D6
/*! \brief 返回該窗口的客戶區(qū)矩形
*
* 覆蓋基類(lèi)的算法,窗口的客戶區(qū)為除去邊框和標(biāo)題區(qū)域的矩形
* \param rect 返回的客戶區(qū)矩形
*/
void GetClientRect(FG_Rect & rect) const;
//##ModelId=3F5EDD9E03DF
/*! \brief 注冊(cè)快捷鍵
*
* 快捷鍵的含義為:當(dāng)本窗口為焦點(diǎn)窗口時(shí),如果用戶按鍵值為wOrgKey的鍵盤(pán)消息,
* 直接把該鍵盤(pán)消息發(fā)送給標(biāo)識(shí)為wID的控件,并把鍵值轉(zhuǎn)換成wActKey
* \param wOrgKey 原始的\ref Virtual_Key
* \param wActKey 發(fā)送到對(duì)應(yīng)的控件時(shí),應(yīng)轉(zhuǎn)換成的實(shí)際\ref Virtual_Key
* \param wID 注冊(cè)快捷鍵的控件
* \return 刪除操作是否成功\n
* true 成功\n
* false 失敗
*/
bool RegisterKey(const WORD wOrgKey, const WORD wActKey, const WORD wID);
//##ModelId=3F6193A800F4
/*! \brief 改變焦點(diǎn)控件
*
* 焦點(diǎn)控件即當(dāng)前有輸入焦點(diǎn)的控件,不是快捷鍵的鍵盤(pán)消息應(yīng)該發(fā)送給該控件\n
* - 改變過(guò)程中
* - 給失去焦點(diǎn)的控件發(fā)送焦點(diǎn)失去消息
* - 給得到焦點(diǎn)的控件發(fā)送焦點(diǎn)得到消息
*
* \param pWidget 要得到輸入焦點(diǎn)的控件
*/
void ChangeFocus(FG_Widget * const pWidget);
protected:
//##ModelId=3F584C9403D0
/*! \brief 重畫(huà)消息\ref FG_MSG_DRAW的處理函數(shù)
*
* 按照覆蓋順序把\ref FG_MSG_DRAW消息發(fā)送給每個(gè)子控件,要求他們重畫(huà)自己
* \param pAdaptor 指向操作系統(tǒng)適配器的指針
*/
void OnDraw(FG_OSAdaptor * pAdaptor);
//##ModelId=3F5C4AEB0321
/*! \brief 鍵盤(pán)消息\ref FG_MSG_KEY的處理函數(shù)
*
* - 如果是\ref FVK_TAB鍵,按順序切換焦點(diǎn)
* - 否則,發(fā)送給快捷鍵管理器處理
* - 如果不是快捷鍵(快捷鍵管理器未處理),發(fā)送給當(dāng)前焦點(diǎn)窗口
*
* \param pMsg 指向鍵盤(pán)消息結(jié)構(gòu)的指針
* \return 該鍵盤(pán)消息是否被處理
* true 該鍵盤(pán)消息已被處理
* false 該鍵盤(pán)消息未被處理
*/
bool OnKey(FG_Message * pMsg);
//##ModelId=3F5C4AEB032B
/*! \brief 鼠標(biāo)消息\ref FG_MSG_MOUSE的處理函數(shù)
*
* 把該消息發(fā)送給鼠標(biāo)指針?biāo)诘拇翱谠兀⑶沂乖摯翱谠氐玫浇裹c(diǎn)
* \param pMsg 指向鼠標(biāo)消息結(jié)構(gòu)的指針
* \return 該鼠標(biāo)消息是否被處理
* true 該鼠標(biāo)消息已被處理
* false 該鼠標(biāo)消息未被處理
*/
bool OnMouse(FG_Message * pMsg);
//##ModelId=3F603B980398
/*! \brief 控件發(fā)送的要求重畫(huà)消息\ref FG_MSG_DRAW_REQUEST的處理函數(shù)
*
* - 如果本窗口為焦點(diǎn)窗口
* - 直接發(fā)送\ref FG_MSG_DRAW消息給要求重畫(huà)控件,使其重畫(huà)自己
* - 否則
* - 給屏幕對(duì)象發(fā)送要求重畫(huà)消息\ref FG_MSG_DRAW_REQUEST
*
* \param pMsg 指向要求重畫(huà)消息結(jié)構(gòu)的指針
*/
void OnDrawRequest(FG_Message * pMsg);
//##ModelId=3F6193A80162
/*! \brief 焦點(diǎn)切換消息\ref FG_MSG_FOCUS的處理函數(shù)
*
* \param pMsg 指向焦點(diǎn)切換消息結(jié)構(gòu)的指針
*/
void OnFocus(FG_Message * pMsg);
//##ModelId=409260D5024A
FG_String m_Title; /*!< \brief 窗口標(biāo)題 */
//##ModelId=3F6193A800B9
FG_Widget * m_pFocus; /*!< \brief 當(dāng)前有焦點(diǎn)的控件指針 */
private:
//##ModelId=3F5E6ECC03A6
FG_KeyMap m_KeyMap; /*!< \brief 鍵盤(pán)映射表管理器 */
DECLARE_MESSAGE_MAP()
};
#endif /* FG_WINDOW_H_HEADER_INCLUDED_C0AD431E */
/* @} */
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -