DriveHQ Start Menu
Cloud Drive Mapping
Folder Sync
Cloud Backup
True Drop Box
FTP/SFTP Hosting
Group Account
DriveHQ Start Menu
Online File Server
My Storage
|
Manage Shares
|
Publishes
|
Drop Boxes
|
Group Account
WebDAV Drive Mapping
Cloud Drive Home
|
WebDAV Guide
|
Drive Mapping Tool
|
Drive Mapping URL
Complete Data Backup
Backup Guide
|
Online Backup Tool
|
Cloud-to-Cloud Backup
FTP, Email & Web Service
FTP Home
|
FTP Hosting FAQ
|
Email Hosting
|
EmailManager
|
Web Hosting
Help & Resources
About
|
Enterprise Service
|
Partnership
|
Comparisons
|
Support
Quick Links
Security and Privacy
Download Software
Service Manual
Use Cases
Group Account
Online Help
Blog
Contact
Cloud Surveillance
Sign Up
Login
Features
Business Features
Online File Server
FTP Hosting
Cloud Drive Mapping
Cloud File Backup
Email Backup & Hosting
Cloud File Sharing
Folder Synchronization
Group Management
True Drop Box
Full-text Search
AD Integration/SSO
Mobile Access
IP Camera & DVR Solution
More...
Personal Features
Personal Cloud Drive
Backup All Devices
Mobile APPs
Personal Web Hosting
Sub-Account (for Kids)
Home/PC/Kids Monitoring
More...
Software
DriveHQ Drive Mapping Tool
DriveHQ FileManager
DriveHQ Online Backup
DriveHQ Mobile Apps
Pricing
Business Plans & Pricing
Personal Plans & Pricing
Price Comparison with Others
Feature Comparison with Others
Install Mobile App
Sign up
Creating account...
Invalid character in username! Only 0-9, a-z, A-Z, _, -, . allowed.
Username is required!
Invalid email address!
E-mail is required!
Password is required!
Password is invalid!
Password and confirmation do not match.
Confirm password is required!
I accept
Membership Agreement
Please read the Membership Agreement and check "I accept"!
Free Quick Sign-up
Sign-up Page
Log in
Signing in...
Username or e-mail address is required!
Password is required!
Keep me logged in
Quick Login
Forgot Password
Up
Upload
Download
Share
Publish
New Folder
New File
Copy
Cut
Delete
Paste
Rate
Upgrade
Rotate
Effect
Edit
Slide
History
//-------------------------------------------------------------------------------------- // File: DXUTgui.h // // Copyright (c) Microsoft Corporation. All rights reserved. //-------------------------------------------------------------------------------------- #pragma once #ifndef DXUT_GUI_H #define DXUT_GUI_H #include
#include
//-------------------------------------------------------------------------------------- // Defines and macros //-------------------------------------------------------------------------------------- #define EVENT_BUTTON_CLICKED 0x0101 #define EVENT_COMBOBOX_SELECTION_CHANGED 0x0201 #define EVENT_RADIOBUTTON_CHANGED 0x0301 #define EVENT_CHECKBOX_CHANGED 0x0401 #define EVENT_SLIDER_VALUE_CHANGED 0x0501 #define EVENT_EDITBOX_STRING 0x0601 // EVENT_EDITBOX_CHANGE is sent when the listbox content changes // due to user input. #define EVENT_EDITBOX_CHANGE 0x0602 #define EVENT_LISTBOX_ITEM_DBLCLK 0x0701 // EVENT_LISTBOX_SELECTION is fired off when the selection changes in // a single selection list box. #define EVENT_LISTBOX_SELECTION 0x0702 #define EVENT_LISTBOX_SELECTION_END 0x0703 //-------------------------------------------------------------------------------------- // Forward declarations //-------------------------------------------------------------------------------------- class CDXUTDialogResourceManager; class CDXUTControl; class CDXUTButton; class CDXUTStatic; class CDXUTCheckBox; class CDXUTRadioButton; class CDXUTComboBox; class CDXUTSlider; class CDXUTEditBox; class CDXUTListBox; class CDXUTScrollBar; class CDXUTElement; struct DXUTElementHolder; struct DXUTTextureNode; struct DXUTFontNode; typedef VOID (CALLBACK *PCALLBACKDXUTGUIEVENT) ( UINT nEvent, int nControlID, CDXUTControl* pControl, void* pUserContext ); //-------------------------------------------------------------------------------------- // Enums for pre-defined control types //-------------------------------------------------------------------------------------- enum DXUT_CONTROL_TYPE { DXUT_CONTROL_BUTTON, DXUT_CONTROL_STATIC, DXUT_CONTROL_CHECKBOX, DXUT_CONTROL_RADIOBUTTON, DXUT_CONTROL_COMBOBOX, DXUT_CONTROL_SLIDER, DXUT_CONTROL_EDITBOX, DXUT_CONTROL_IMEEDITBOX, DXUT_CONTROL_LISTBOX, DXUT_CONTROL_SCROLLBAR, }; enum DXUT_CONTROL_STATE { DXUT_STATE_NORMAL = 0, DXUT_STATE_DISABLED, DXUT_STATE_HIDDEN, DXUT_STATE_FOCUS, DXUT_STATE_MOUSEOVER, DXUT_STATE_PRESSED, }; #define MAX_CONTROL_STATES 6 struct DXUTBlendColor { void Init( D3DCOLOR defaultColor, D3DCOLOR disabledColor = D3DCOLOR_ARGB(200, 128, 128, 128), D3DCOLOR hiddenColor = 0 ); void Blend( UINT iState, float fElapsedTime, float fRate = 0.7f ); D3DCOLOR States[ MAX_CONTROL_STATES ]; // Modulate colors for all possible control states D3DXCOLOR Current; }; //----------------------------------------------------------------------------- // Contains all the display tweakables for a sub-control //----------------------------------------------------------------------------- class CDXUTElement { public: void SetTexture( UINT iTexture, RECT* prcTexture, D3DCOLOR defaultTextureColor = D3DCOLOR_ARGB(255, 255, 255, 255) ); void SetFont( UINT iFont, D3DCOLOR defaultFontColor = D3DCOLOR_ARGB(255, 255, 255, 255), DWORD dwTextFormat = DT_CENTER | DT_VCENTER ); void Refresh(); UINT iTexture; // Index of the texture for this Element UINT iFont; // Index of the font for this Element DWORD dwTextFormat; // The format argument to DrawText RECT rcTexture; // Bounding rect of this element on the composite texture DXUTBlendColor TextureColor; DXUTBlendColor FontColor; }; //----------------------------------------------------------------------------- // All controls must be assigned to a dialog, which handles // input and rendering for the controls. //----------------------------------------------------------------------------- class CDXUTDialog { friend class CDXUTDialogResourceManager; public: CDXUTDialog(); ~CDXUTDialog(); // Need to call this now void Init( CDXUTDialogResourceManager* pManager, bool bRegisterDialog = true ); void Init( CDXUTDialogResourceManager* pManager, bool bRegisterDialog, LPCWSTR pszControlTextureFilename ); void Init( CDXUTDialogResourceManager* pManager, bool bRegisterDialog, LPCWSTR szControlTextureResourceName, HMODULE hControlTextureResourceModule ); // Windows message handler bool MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); // Control creation HRESULT AddStatic( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bIsDefault=false, CDXUTStatic** ppCreated=NULL ); HRESULT AddButton( int ID, LPCWSTR strText, int x, int y, int width, int height, UINT nHotkey=0, bool bIsDefault=false, CDXUTButton** ppCreated=NULL ); HRESULT AddCheckBox( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bChecked=false, UINT nHotkey=0, bool bIsDefault=false, CDXUTCheckBox** ppCreated=NULL ); HRESULT AddRadioButton( int ID, UINT nButtonGroup, LPCWSTR strText, int x, int y, int width, int height, bool bChecked=false, UINT nHotkey=0, bool bIsDefault=false, CDXUTRadioButton** ppCreated=NULL ); HRESULT AddComboBox( int ID, int x, int y, int width, int height, UINT nHotKey=0, bool bIsDefault=false, CDXUTComboBox** ppCreated=NULL ); HRESULT AddSlider( int ID, int x, int y, int width, int height, int min=0, int max=100, int value=50, bool bIsDefault=false, CDXUTSlider** ppCreated=NULL ); // AddIMEEditBox has been renamed into DXUTguiIME.cpp as CDXUTIMEEditBox::CreateIMEEditBox HRESULT AddEditBox( int ID, LPCWSTR strText, int x, int y, int width, int height, bool bIsDefault=false, CDXUTEditBox** ppCreated=NULL ); HRESULT AddListBox( int ID, int x, int y, int width, int height, DWORD dwStyle=0, CDXUTListBox** ppCreated=NULL ); HRESULT AddControl( CDXUTControl* pControl ); HRESULT InitControl( CDXUTControl* pControl ); // Control retrieval CDXUTStatic* GetStatic( int ID ) { return (CDXUTStatic*) GetControl( ID, DXUT_CONTROL_STATIC ); } CDXUTButton* GetButton( int ID ) { return (CDXUTButton*) GetControl( ID, DXUT_CONTROL_BUTTON ); } CDXUTCheckBox* GetCheckBox( int ID ) { return (CDXUTCheckBox*) GetControl( ID, DXUT_CONTROL_CHECKBOX ); } CDXUTRadioButton* GetRadioButton( int ID ) { return (CDXUTRadioButton*) GetControl( ID, DXUT_CONTROL_RADIOBUTTON ); } CDXUTComboBox* GetComboBox( int ID ) { return (CDXUTComboBox*) GetControl( ID, DXUT_CONTROL_COMBOBOX ); } CDXUTSlider* GetSlider( int ID ) { return (CDXUTSlider*) GetControl( ID, DXUT_CONTROL_SLIDER ); } CDXUTEditBox* GetEditBox( int ID ) { return (CDXUTEditBox*) GetControl( ID, DXUT_CONTROL_EDITBOX ); } CDXUTListBox* GetListBox( int ID ) { return (CDXUTListBox*) GetControl( ID, DXUT_CONTROL_LISTBOX ); } CDXUTControl* GetControl( int ID ); CDXUTControl* GetControl( int ID, UINT nControlType ); CDXUTControl* GetControlAtPoint( POINT pt ); bool GetControlEnabled( int ID ); void SetControlEnabled( int ID, bool bEnabled ); void ClearRadioButtonGroup( UINT nGroup ); void ClearComboBox( int ID ); // Access the default display Elements used when adding new controls HRESULT SetDefaultElement( UINT nControlType, UINT iElement, CDXUTElement* pElement ); CDXUTElement* GetDefaultElement( UINT nControlType, UINT iElement ); // Methods called by controls void SendEvent( UINT nEvent, bool bTriggeredByUser, CDXUTControl* pControl ); void RequestFocus( CDXUTControl* pControl ); // Render helpers HRESULT DrawRect( RECT* pRect, D3DCOLOR color ); HRESULT DrawRect9( RECT* pRect, D3DCOLOR color ); //HRESULT DrawRect10( RECT* pRect, D3DCOLOR color ); HRESULT DrawPolyLine( POINT* apPoints, UINT nNumPoints, D3DCOLOR color ); HRESULT DrawSprite( CDXUTElement* pElement, RECT* prcDest, float fDepth ); HRESULT DrawSprite9( CDXUTElement* pElement, RECT* prcDest ); //HRESULT DrawSprite10( CDXUTElement* pElement, RECT* prcDest, float fDepth ); HRESULT CalcTextRect( LPCWSTR strText, CDXUTElement* pElement, RECT* prcDest, int nCount = -1 ); HRESULT DrawText( LPCWSTR strText, CDXUTElement* pElement, RECT* prcDest, bool bShadow = false, int nCount = -1 ); HRESULT DrawText9( LPCWSTR strText, CDXUTElement* pElement, RECT* prcDest, bool bShadow = false, int nCount = -1 ); //HRESULT DrawText10( LPCWSTR strText, CDXUTElement* pElement, RECT* prcDest, bool bShadow = false, int nCount = -1 ); // Attributes bool GetVisible() { return m_bVisible; } void SetVisible( bool bVisible ) { m_bVisible = bVisible; } bool GetMinimized() { return m_bMinimized; } void SetMinimized( bool bMinimized ) { m_bMinimized = bMinimized; } void SetBackgroundColors( D3DCOLOR colorAllCorners ) { SetBackgroundColors( colorAllCorners, colorAllCorners, colorAllCorners, colorAllCorners ); } void SetBackgroundColors( D3DCOLOR colorTopLeft, D3DCOLOR colorTopRight, D3DCOLOR colorBottomLeft, D3DCOLOR colorBottomRight ); void EnableCaption( bool bEnable ) { m_bCaption = bEnable; } int GetCaptionHeight() const { return m_nCaptionHeight; } void SetCaptionHeight( int nHeight ) { m_nCaptionHeight = nHeight; } void SetCaptionText( const WCHAR *pwszText ) { StringCchCopy( m_wszCaption, sizeof(m_wszCaption)/sizeof(m_wszCaption[0]), pwszText); } void GetLocation( POINT &Pt ) const { Pt.x = m_x; Pt.y = m_y; } void SetLocation( int x, int y ) { m_x = x; m_y = y; } void SetSize( int width, int height ) { m_width = width; m_height = height; } int GetWidth() { return m_width; } int GetHeight() { return m_height; } static void WINAPI SetRefreshTime( float fTime ){ s_fTimeRefresh = fTime; } static CDXUTControl* WINAPI GetNextControl( CDXUTControl* pControl ); static CDXUTControl* WINAPI GetPrevControl( CDXUTControl* pControl ); void RemoveControl( int ID ); void RemoveAllControls(); // Sets the callback used to notify the app of control events void SetCallback( PCALLBACKDXUTGUIEVENT pCallback, void* pUserContext = NULL ); void EnableNonUserEvents( bool bEnable ) { m_bNonUserEvents = bEnable; } void EnableKeyboardInput( bool bEnable ) { m_bKeyboardInput = bEnable; } void EnableMouseInput( bool bEnable ) { m_bMouseInput = bEnable; } bool IsKeyboardInputEnabled() const { return m_bKeyboardInput; } // Device state notification void Refresh(); HRESULT OnRender( float fElapsedTime ); // Shared resource access. Indexed fonts and textures are shared among // all the controls. HRESULT SetFont( UINT index, LPCWSTR strFaceName, LONG height, LONG weight ); DXUTFontNode* GetFont( UINT index ); HRESULT SetTexture( UINT index, LPCWSTR strFilename ); HRESULT SetTexture( UINT index, LPCWSTR strResourceName, HMODULE hResourceModule ); DXUTTextureNode* GetTexture( UINT index ); CDXUTDialogResourceManager* GetManager() { return m_pManager; } static void WINAPI ClearFocus(); void FocusDefaultControl(); bool m_bNonUserEvents; bool m_bKeyboardInput; bool m_bMouseInput; private: int m_nDefaultControlID; HRESULT OnRender9( float fElapsedTime ); //HRESULT OnRender10( float fElapsedTime ); static double s_fTimeRefresh; double m_fTimeLastRefresh; // Initialize default Elements void InitDefaultElements(); // Windows message handlers void OnMouseMove( POINT pt ); void OnMouseUp( POINT pt ); void SetNextDialog( CDXUTDialog* pNextDialog ); // Control events bool OnCycleFocus( bool bForward ); static CDXUTControl* s_pControlFocus; // The control which has focus static CDXUTControl* s_pControlPressed; // The control currently pressed CDXUTControl* m_pControlMouseOver; // The control which is hovered over bool m_bVisible; bool m_bCaption; bool m_bMinimized; bool m_bDrag; WCHAR m_wszCaption[256]; int m_x; int m_y; int m_width; int m_height; int m_nCaptionHeight; D3DCOLOR m_colorTopLeft; D3DCOLOR m_colorTopRight; D3DCOLOR m_colorBottomLeft; D3DCOLOR m_colorBottomRight; CDXUTDialogResourceManager* m_pManager; PCALLBACKDXUTGUIEVENT m_pCallbackEvent; void* m_pCallbackEventUserContext; CGrowableArray< int > m_Textures; // Index into m_TextureCache; CGrowableArray< int > m_Fonts; // Index into m_FontCache; CGrowableArray< CDXUTControl* > m_Controls; CGrowableArray< DXUTElementHolder* > m_DefaultElements; CDXUTElement m_CapElement; // Element for the caption CDXUTDialog* m_pNextDialog; CDXUTDialog* m_pPrevDialog; }; //-------------------------------------------------------------------------------------- // Structs for shared resources //-------------------------------------------------------------------------------------- struct DXUTTextureNode { bool bFileSource; // True if this texture is loaded from a file. False if from resource. HMODULE hResourceModule; int nResourceID; // Resource ID. If 0, string-based ID is used and stored in strFilename. WCHAR strFilename[MAX_PATH]; DWORD dwWidth; DWORD dwHeight; IDirect3DTexture9* pTexture9; ID3D10Texture2D* pTexture10; ID3D10ShaderResourceView *pTexResView; }; struct DXUTFontNode { WCHAR strFace[MAX_PATH]; LONG nHeight; LONG nWeight; ID3DXFont* pFont9; ID3DX10Font* pFont10; }; //----------------------------------------------------------------------------- // Manages shared resources of dialogs //----------------------------------------------------------------------------- class CDXUTDialogResourceManager { public: CDXUTDialogResourceManager(); ~CDXUTDialogResourceManager(); bool MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); // D3D9 specific HRESULT OnD3D9CreateDevice( LPDIRECT3DDEVICE9 pd3dDevice ); HRESULT OnD3D9ResetDevice(); void OnD3D9LostDevice(); void OnD3D9DestroyDevice(); IDirect3DDevice9* GetD3D9Device() { return m_pd3d9Device; } //// D3D10 specific //HRESULT OnD3D10CreateDevice( ID3D10Device *pd3dDevice ); //HRESULT OnD3D10ResizedSwapChain( ID3D10Device *pd3dDevice, const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc ); //void OnD3D10ReleasingSwapChain(); //void OnD3D10DestroyDevice(); //ID3D10Device* GetD3D10Device() { return m_pd3d10Device; } DXUTFontNode* GetFontNode( int iIndex ) { return m_FontCache.GetAt( iIndex ); }; DXUTTextureNode* GetTextureNode( int iIndex ) { return m_TextureCache.GetAt( iIndex ); }; int AddFont( LPCWSTR strFaceName, LONG height, LONG weight ); int AddTexture( LPCWSTR strFilename ); int AddTexture( LPCWSTR strResourceName, HMODULE hResourceModule ); bool RegisterDialog( CDXUTDialog *pDialog ); void UnregisterDialog( CDXUTDialog *pDialog ); void EnableKeyboardInputForAllDialogs(); // Shared between all dialogs // D3D9 IDirect3DStateBlock9* m_pStateBlock; ID3DXSprite* m_pSprite; // Sprite used for drawing //// D3D10 //ID3D10Effect* m_pEffect10; // Effect used to render UI with D3D10 //ID3D10EffectTechnique* m_pTechRenderUI10; // Technique: RenderUI //ID3D10EffectTechnique* m_pTechRenderUIUntex10; // Technique: RenderUI without texture //ID3D10EffectShaderResourceVariable *m_pFxTexture10; //ID3D10InputLayout* m_pInputLayout10; //ID3D10Buffer* m_pVBScreenQuad10; //ID3D10StateBlock* m_pStateBlock10; //ID3DX10Sprite* m_pSprite10; //UINT m_nBackBufferWidth; //UINT m_nBackBufferHeight; CGrowableArray< CDXUTDialog* > m_Dialogs; // Dialogs registered protected: // D3D9 specific IDirect3DDevice9* m_pd3d9Device; HRESULT CreateFont9( UINT index ); HRESULT CreateTexture9( UINT index ); //// D3D10 specific //ID3D10Device* m_pd3d10Device; //HRESULT CreateFont10( UINT index ); //HRESULT CreateTexture10( UINT index ); CGrowableArray< DXUTTextureNode* > m_TextureCache; // Shared textures CGrowableArray< DXUTFontNode* > m_FontCache; // Shared fonts }; //----------------------------------------------------------------------------- // Base class for controls //----------------------------------------------------------------------------- class CDXUTControl { public: CDXUTControl( CDXUTDialog *pDialog = NULL ); virtual ~CDXUTControl(); virtual HRESULT OnInit() { return S_OK; } virtual void Refresh(); virtual void Render( float fElapsedTime ) { }; // Windows message handler virtual bool MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam ) { return false; } virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ) { return false; } virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ) { return false; } virtual bool CanHaveFocus() { return false; } virtual void OnFocusIn() { m_bHasFocus = true; } virtual void OnFocusOut() { m_bHasFocus = false; } virtual void OnMouseEnter() { m_bMouseOver = true; } virtual void OnMouseLeave() { m_bMouseOver = false; } virtual void OnHotkey() {} virtual BOOL ContainsPoint( POINT pt ) { return PtInRect( &m_rcBoundingBox, pt ); } virtual void SetEnabled( bool bEnabled ) { m_bEnabled = bEnabled; } virtual bool GetEnabled() { return m_bEnabled; } virtual void SetVisible( bool bVisible ) { m_bVisible = bVisible; } virtual bool GetVisible() { return m_bVisible; } UINT GetType() const { return m_Type; } int GetID() const { return m_ID; } void SetID( int ID ) { m_ID = ID; } void SetLocation( int x, int y ) { m_x = x; m_y = y; UpdateRects(); } void SetSize( int width, int height ) { m_width = width; m_height = height; UpdateRects(); } void SetHotkey( UINT nHotkey ) { m_nHotkey = nHotkey; } UINT GetHotkey() { return m_nHotkey; } void SetUserData( void *pUserData ) { m_pUserData = pUserData; } void *GetUserData() const { return m_pUserData; } virtual void SetTextColor( D3DCOLOR Color ); CDXUTElement* GetElement( UINT iElement ) { return m_Elements.GetAt( iElement ); } HRESULT SetElement( UINT iElement, CDXUTElement* pElement); bool m_bVisible; // Shown/hidden flag bool m_bMouseOver; // Mouse pointer is above control bool m_bHasFocus; // Control has input focus bool m_bIsDefault; // Is the default control // Size, scale, and positioning members int m_x, m_y; int m_width, m_height; // These members are set by the container CDXUTDialog* m_pDialog; // Parent container UINT m_Index; // Index within the control list CGrowableArray< CDXUTElement* > m_Elements; // All display elements protected: virtual void UpdateRects(); int m_ID; // ID number DXUT_CONTROL_TYPE m_Type; // Control type, set once in constructor UINT m_nHotkey; // Virtual key code for this control's hotkey void *m_pUserData; // Data associated with this control that is set by user. bool m_bEnabled; // Enabled/disabled flag RECT m_rcBoundingBox; // Rectangle defining the active region of the control }; //----------------------------------------------------------------------------- // Contains all the display information for a given control type //----------------------------------------------------------------------------- struct DXUTElementHolder { UINT nControlType; UINT iElement; CDXUTElement Element; }; //----------------------------------------------------------------------------- // Static control //----------------------------------------------------------------------------- class CDXUTStatic : public CDXUTControl { public: CDXUTStatic( CDXUTDialog *pDialog = NULL ); virtual void Render( float fElapsedTime ); virtual BOOL ContainsPoint( POINT pt ) { return false; } HRESULT GetTextCopy( LPWSTR strDest, UINT bufferCount ); LPCWSTR GetText() { return m_strText; } HRESULT SetText( LPCWSTR strText ); protected: WCHAR m_strText[MAX_PATH]; // Window text }; //----------------------------------------------------------------------------- // Button control //----------------------------------------------------------------------------- class CDXUTButton : public CDXUTStatic { public: CDXUTButton( CDXUTDialog *pDialog = NULL ); virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ); virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ); virtual void OnHotkey() { if( m_pDialog->IsKeyboardInputEnabled() ) m_pDialog->RequestFocus( this ); m_pDialog->SendEvent( EVENT_BUTTON_CLICKED, true, this ); } virtual BOOL ContainsPoint( POINT pt ) { return PtInRect( &m_rcBoundingBox, pt ); } virtual bool CanHaveFocus() { return (m_bVisible && m_bEnabled); } virtual void Render( float fElapsedTime ); protected: bool m_bPressed; }; //----------------------------------------------------------------------------- // CheckBox control //----------------------------------------------------------------------------- class CDXUTCheckBox : public CDXUTButton { public: CDXUTCheckBox( CDXUTDialog *pDialog = NULL ); virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ); virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ); virtual void OnHotkey() { if( m_pDialog->IsKeyboardInputEnabled() ) m_pDialog->RequestFocus( this ); SetCheckedInternal( !m_bChecked, true ); } virtual BOOL ContainsPoint( POINT pt ); virtual void UpdateRects(); virtual void Render( float fElapsedTime ); bool GetChecked() { return m_bChecked; } void SetChecked( bool bChecked ) { SetCheckedInternal( bChecked, false ); } protected: virtual void SetCheckedInternal( bool bChecked, bool bFromInput ); bool m_bChecked; RECT m_rcButton; RECT m_rcText; }; //----------------------------------------------------------------------------- // RadioButton control //----------------------------------------------------------------------------- class CDXUTRadioButton : public CDXUTCheckBox { public: CDXUTRadioButton( CDXUTDialog *pDialog = NULL ); virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ); virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ); virtual void OnHotkey() { if( m_pDialog->IsKeyboardInputEnabled() ) m_pDialog->RequestFocus( this ); SetCheckedInternal( true, true, true ); } void SetChecked( bool bChecked, bool bClearGroup=true ) { SetCheckedInternal( bChecked, bClearGroup, false ); } void SetButtonGroup( UINT nButtonGroup ) { m_nButtonGroup = nButtonGroup; } UINT GetButtonGroup() { return m_nButtonGroup; } protected: virtual void SetCheckedInternal( bool bChecked, bool bClearGroup, bool bFromInput ); UINT m_nButtonGroup; }; //----------------------------------------------------------------------------- // Scrollbar control //----------------------------------------------------------------------------- class CDXUTScrollBar : public CDXUTControl { public: CDXUTScrollBar( CDXUTDialog *pDialog = NULL ); virtual ~CDXUTScrollBar(); virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ); virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ); virtual bool MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam ); virtual void Render( float fElapsedTime ); virtual void UpdateRects(); void SetTrackRange( int nStart, int nEnd ); int GetTrackPos() { return m_nPosition; } void SetTrackPos( int nPosition ) { m_nPosition = nPosition; Cap(); UpdateThumbRect(); } int GetPageSize() { return m_nPageSize; } void SetPageSize( int nPageSize ) { m_nPageSize = nPageSize; Cap(); UpdateThumbRect(); } void Scroll( int nDelta ); // Scroll by nDelta items (plus or minus) void ShowItem( int nIndex ); // Ensure that item nIndex is displayed, scroll if necessary protected: // ARROWSTATE indicates the state of the arrow buttons. // CLEAR No arrow is down. // CLICKED_UP Up arrow is clicked. // CLICKED_DOWN Down arrow is clicked. // HELD_UP Up arrow is held down for sustained period. // HELD_DOWN Down arrow is held down for sustained period. enum ARROWSTATE { CLEAR, CLICKED_UP, CLICKED_DOWN, HELD_UP, HELD_DOWN }; void UpdateThumbRect(); void Cap(); // Clips position at boundaries. Ensures it stays within legal range. bool m_bShowThumb; bool m_bDrag; RECT m_rcUpButton; RECT m_rcDownButton; RECT m_rcTrack; RECT m_rcThumb; int m_nPosition; // Position of the first displayed item int m_nPageSize; // How many items are displayable in one page int m_nStart; // First item int m_nEnd; // The index after the last item POINT m_LastMouse;// Last mouse position ARROWSTATE m_Arrow; // State of the arrows double m_dArrowTS; // Timestamp of last arrow event. }; //----------------------------------------------------------------------------- // ListBox control //----------------------------------------------------------------------------- struct DXUTListBoxItem { WCHAR strText[256]; void* pData; RECT rcActive; bool bSelected; }; class CDXUTListBox : public CDXUTControl { public: CDXUTListBox( CDXUTDialog *pDialog = NULL ); virtual ~CDXUTListBox(); virtual HRESULT OnInit() { return m_pDialog->InitControl( &m_ScrollBar ); } virtual bool CanHaveFocus() { return (m_bVisible && m_bEnabled); } virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ); virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ); virtual bool MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam ); virtual void Render( float fElapsedTime ); virtual void UpdateRects(); DWORD GetStyle() const { return m_dwStyle; } int GetSize() const { return m_Items.GetSize(); } void SetStyle( DWORD dwStyle ) { m_dwStyle = dwStyle; } int GetScrollBarWidth() const { return m_nSBWidth; } void SetScrollBarWidth( int nWidth ) { m_nSBWidth = nWidth; UpdateRects(); } void SetBorder( int nBorder, int nMargin ) { m_nBorder = nBorder; m_nMargin = nMargin; } HRESULT AddItem( const WCHAR *wszText, void *pData ); HRESULT InsertItem( int nIndex, const WCHAR *wszText, void *pData ); void RemoveItem( int nIndex ); void RemoveItemByText( WCHAR *wszText ); void RemoveItemByData( void *pData ); void RemoveAllItems(); DXUTListBoxItem *GetItem( int nIndex ); int GetSelectedIndex( int nPreviousSelected = -1 ); DXUTListBoxItem *GetSelectedItem( int nPreviousSelected = -1 ) { return GetItem( GetSelectedIndex( nPreviousSelected ) ); } void SelectItem( int nNewIndex ); enum STYLE { MULTISELECTION = 1 }; protected: RECT m_rcText; // Text rendering bound RECT m_rcSelection; // Selection box bound CDXUTScrollBar m_ScrollBar; int m_nSBWidth; int m_nBorder; int m_nMargin; int m_nTextHeight; // Height of a single line of text DWORD m_dwStyle; // List box style int m_nSelected; // Index of the selected item for single selection list box int m_nSelStart; // Index of the item where selection starts (for handling multi-selection) bool m_bDrag; // Whether the user is dragging the mouse to select CGrowableArray< DXUTListBoxItem* > m_Items; }; //----------------------------------------------------------------------------- // ComboBox control //----------------------------------------------------------------------------- struct DXUTComboBoxItem { WCHAR strText[256]; void* pData; RECT rcActive; bool bVisible; }; class CDXUTComboBox : public CDXUTButton { public: CDXUTComboBox( CDXUTDialog *pDialog = NULL ); virtual ~CDXUTComboBox(); virtual void SetTextColor( D3DCOLOR Color ); virtual HRESULT OnInit() { return m_pDialog->InitControl( &m_ScrollBar ); } virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ); virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ); virtual void OnHotkey(); virtual bool CanHaveFocus() { return (m_bVisible && m_bEnabled); } virtual void OnFocusOut(); virtual void Render( float fElapsedTime ); virtual void UpdateRects(); HRESULT AddItem( const WCHAR* strText, void* pData ); void RemoveAllItems(); void RemoveItem( UINT index ); bool ContainsItem( const WCHAR* strText, UINT iStart=0 ); int FindItem( const WCHAR* strText, UINT iStart=0 ); void* GetItemData( const WCHAR* strText ); void* GetItemData( int nIndex ); void SetDropHeight( UINT nHeight ) { m_nDropHeight = nHeight; UpdateRects(); } int GetScrollBarWidth() const { return m_nSBWidth; } void SetScrollBarWidth( int nWidth ) { m_nSBWidth = nWidth; UpdateRects(); } int GetSelectedIndex() const { return m_iSelected; } void* GetSelectedData(); DXUTComboBoxItem* GetSelectedItem(); UINT GetNumItems() { return m_Items.GetSize(); } DXUTComboBoxItem* GetItem( UINT index ) { return m_Items.GetAt( index ); } HRESULT SetSelectedByIndex( UINT index ); HRESULT SetSelectedByText( const WCHAR* strText ); HRESULT SetSelectedByData( void* pData ); protected: int m_iSelected; int m_iFocused; int m_nDropHeight; CDXUTScrollBar m_ScrollBar; int m_nSBWidth; bool m_bOpened; RECT m_rcText; RECT m_rcButton; RECT m_rcDropdown; RECT m_rcDropdownText; CGrowableArray< DXUTComboBoxItem* > m_Items; }; //----------------------------------------------------------------------------- // Slider control //----------------------------------------------------------------------------- class CDXUTSlider : public CDXUTControl { public: CDXUTSlider( CDXUTDialog *pDialog = NULL ); virtual BOOL ContainsPoint( POINT pt ); virtual bool CanHaveFocus() { return (m_bVisible && m_bEnabled); } virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ); virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ); virtual void UpdateRects(); virtual void Render( float fElapsedTime ); void SetValue( int nValue ) { SetValueInternal( nValue, false ); } int GetValue() const { return m_nValue; }; void GetRange( int &nMin, int &nMax ) const { nMin = m_nMin; nMax = m_nMax; } void SetRange( int nMin, int nMax ); protected: void SetValueInternal( int nValue, bool bFromInput ); int ValueFromPos( int x ); int m_nValue; int m_nMin; int m_nMax; int m_nDragX; // Mouse position at start of drag int m_nDragOffset; // Drag offset from the center of the button int m_nButtonX; bool m_bPressed; RECT m_rcButton; }; //----------------------------------------------------------------------------- // CUniBuffer class for the edit control //----------------------------------------------------------------------------- class CUniBuffer { public: CUniBuffer( int nInitialSize = 1 ); ~CUniBuffer(); static void WINAPI Initialize(); static void WINAPI Uninitialize(); int GetBufferSize() { return m_nBufferSize; } bool SetBufferSize( int nSize ); int GetTextSize() { return lstrlenW( m_pwszBuffer ); } const WCHAR* GetBuffer() { return m_pwszBuffer; } const WCHAR& operator[]( int n ) const { return m_pwszBuffer[n]; } WCHAR& operator[]( int n ); DXUTFontNode* GetFontNode() { return m_pFontNode; } void SetFontNode( DXUTFontNode *pFontNode ) { m_pFontNode = pFontNode; } void Clear(); bool InsertChar( int nIndex, WCHAR wChar ); // Inserts the char at specified index. If nIndex == -1, insert to the end. bool RemoveChar( int nIndex ); // Removes the char at specified index. If nIndex == -1, remove the last char. bool InsertString( int nIndex, const WCHAR *pStr, int nCount = -1 ); // Inserts the first nCount characters of the string pStr at specified index. If nCount == -1, the entire string is inserted. If nIndex == -1, insert to the end. bool SetText( LPCWSTR wszText ); // Uniscribe HRESULT CPtoX( int nCP, BOOL bTrail, int *pX ); HRESULT XtoCP( int nX, int *pCP, int *pnTrail ); void GetPriorItemPos( int nCP, int *pPrior ); void GetNextItemPos( int nCP, int *pPrior ); private: HRESULT Analyse(); // Uniscribe -- Analyse() analyses the string in the buffer WCHAR* m_pwszBuffer; // Buffer to hold text int m_nBufferSize; // Size of the buffer allocated, in characters // Uniscribe-specific DXUTFontNode* m_pFontNode; // Font node for the font that this buffer uses bool m_bAnalyseRequired; // True if the string has changed since last analysis. SCRIPT_STRING_ANALYSIS m_Analysis; // Analysis for the current string private: // Empty implementation of the Uniscribe API static HRESULT WINAPI Dummy_ScriptApplyDigitSubstitution( const SCRIPT_DIGITSUBSTITUTE*, SCRIPT_CONTROL*, SCRIPT_STATE* ) { return E_NOTIMPL; } static HRESULT WINAPI Dummy_ScriptStringAnalyse( HDC, const void *, int, int, int, DWORD, int, SCRIPT_CONTROL*, SCRIPT_STATE*, const int*, SCRIPT_TABDEF*, const BYTE*, SCRIPT_STRING_ANALYSIS* ) { return E_NOTIMPL; } static HRESULT WINAPI Dummy_ScriptStringCPtoX( SCRIPT_STRING_ANALYSIS, int, BOOL, int* ) { return E_NOTIMPL; } static HRESULT WINAPI Dummy_ScriptStringXtoCP( SCRIPT_STRING_ANALYSIS, int, int*, int* ) { return E_NOTIMPL; } static HRESULT WINAPI Dummy_ScriptStringFree( SCRIPT_STRING_ANALYSIS* ) { return E_NOTIMPL; } static const SCRIPT_LOGATTR* WINAPI Dummy_ScriptString_pLogAttr( SCRIPT_STRING_ANALYSIS ) { return NULL; } static const int* WINAPI Dummy_ScriptString_pcOutChars( SCRIPT_STRING_ANALYSIS ) { return NULL; } // Function pointers static HRESULT (WINAPI *_ScriptApplyDigitSubstitution)( const SCRIPT_DIGITSUBSTITUTE*, SCRIPT_CONTROL*, SCRIPT_STATE* ); static HRESULT (WINAPI *_ScriptStringAnalyse)( HDC, const void *, int, int, int, DWORD, int, SCRIPT_CONTROL*, SCRIPT_STATE*, const int*, SCRIPT_TABDEF*, const BYTE*, SCRIPT_STRING_ANALYSIS* ); static HRESULT (WINAPI *_ScriptStringCPtoX)( SCRIPT_STRING_ANALYSIS, int, BOOL, int* ); static HRESULT (WINAPI *_ScriptStringXtoCP)( SCRIPT_STRING_ANALYSIS, int, int*, int* ); static HRESULT (WINAPI *_ScriptStringFree)( SCRIPT_STRING_ANALYSIS* ); static const SCRIPT_LOGATTR* (WINAPI *_ScriptString_pLogAttr)( SCRIPT_STRING_ANALYSIS ); static const int* (WINAPI *_ScriptString_pcOutChars)( SCRIPT_STRING_ANALYSIS ); static HINSTANCE s_hDll; // Uniscribe DLL handle }; //----------------------------------------------------------------------------- // EditBox control //----------------------------------------------------------------------------- class CDXUTEditBox : public CDXUTControl { public: CDXUTEditBox( CDXUTDialog *pDialog = NULL ); virtual ~CDXUTEditBox(); virtual bool HandleKeyboard( UINT uMsg, WPARAM wParam, LPARAM lParam ); virtual bool HandleMouse( UINT uMsg, POINT pt, WPARAM wParam, LPARAM lParam ); virtual bool MsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam ); virtual void UpdateRects(); virtual bool CanHaveFocus() { return (m_bVisible && m_bEnabled); } virtual void Render( float fElapsedTime ); virtual void OnFocusIn(); void SetText( LPCWSTR wszText, bool bSelected = false ); LPCWSTR GetText() { return m_Buffer.GetBuffer(); } int GetTextLength() { return m_Buffer.GetTextSize(); } // Returns text length in chars excluding NULL. HRESULT GetTextCopy( LPWSTR strDest, UINT bufferCount ); void ClearText(); virtual void SetTextColor( D3DCOLOR Color ) { m_TextColor = Color; } // Text color void SetSelectedTextColor( D3DCOLOR Color ) { m_SelTextColor = Color; } // Selected text color void SetSelectedBackColor( D3DCOLOR Color ) { m_SelBkColor = Color; } // Selected background color void SetCaretColor( D3DCOLOR Color ) { m_CaretColor = Color; } // Caret color void SetBorderWidth( int nBorder ) { m_nBorder = nBorder; UpdateRects(); } // Border of the window void SetSpacing( int nSpacing ) { m_nSpacing = nSpacing; UpdateRects(); } void ParseFloatArray( float *pNumbers, int nCount ); void SetTextFloatArray( const float *pNumbers, int nCount ); protected: void PlaceCaret( int nCP ); void DeleteSelectionText(); void ResetCaretBlink(); void CopyToClipboard(); void PasteFromClipboard(); CUniBuffer m_Buffer; // Buffer to hold text int m_nBorder; // Border of the window int m_nSpacing; // Spacing between the text and the edge of border RECT m_rcText; // Bounding rectangle for the text RECT m_rcRender[9]; // Convenient rectangles for rendering elements double m_dfBlink; // Caret blink time in milliseconds double m_dfLastBlink; // Last timestamp of caret blink bool m_bCaretOn; // Flag to indicate whether caret is currently visible int m_nCaret; // Caret position, in characters bool m_bInsertMode; // If true, control is in insert mode. Else, overwrite mode. int m_nSelStart; // Starting position of the selection. The caret marks the end. int m_nFirstVisible;// First visible character in the edit control D3DCOLOR m_TextColor; // Text color D3DCOLOR m_SelTextColor; // Selected text color D3DCOLOR m_SelBkColor; // Selected background color D3DCOLOR m_CaretColor; // Caret color // Mouse-specific bool m_bMouseDrag; // True to indicate drag in progress // Static static bool s_bHideCaret; // If true, we don't render the caret. }; #endif // DXUT_GUI_H
DXUTgui.h
Page URL
File URL
Prev
5/29
Next
Download
( 38 KB )
Note: The DriveHQ service banners will NOT be displayed if the file owner is a paid member.
Comments
Total ratings:
0
Average rating:
Not Rated
Would you like to comment?
Join DriveHQ
for a free account, or
Logon
if you are already a member.