MiniCA V2.0版本源码。《小型CA系统V2.1含源码》发表以来

源代码在线查看: fileeditctrl.h

软件大小: 5233 K
上传用户: heyuyutu
关键词: MiniCA 2.0 2.1 源码
下载地址: 免注册下载 普通下载 VIP

相关代码

				/****************************************************************************
				FileEditCtrl.h : header file for the CFileEditCtrl control class
				written by PJ Arends
				pja@telus.net
				
				For updates check http://www3.telus.net/pja/CFileEditCtrl.htm
				
				-----------------------------------------------------------------------------
				This code is provided as is, with no warranty as to it's suitability or usefulness
				in any application in which it may be used. This code has not been tested for
				UNICODE builds, nor has it been tested on a network ( with UNC paths ).
				
				This code may be used in any way you desire. This file may be redistributed by any
				means as long as it is not sold for profit, and providing that this notice and the
				authors name are included.
				
				If any bugs are found and fixed, a note to the author explaining the problem and
				fix would be nice.
				-----------------------------------------------------------------------------
				****************************************************************************/
				
				#if !defined(AFX_FILEEDITCTRL_H__F15965B0_B05A_11D4_B625_A1459D96AB20__INCLUDED_)
				#define AFX_FILEEDITCTRL_H__F15965B0_B05A_11D4_B625_A1459D96AB20__INCLUDED_
				
				#if _MSC_VER > 1000
				#pragma once
				#endif // _MSC_VER > 1000
				
				#ifndef _SHLOBJ_H_
				#include   // for SHBrowseForFolder() and BROWSEINFO structure
				#endif // _SHLOBJ_H_
				
				#ifndef __AFXCMN_H__
				#include   // for CToolTipCtrl
				#endif // __AFXCMN_H__
				
				// PJAImage.h has to be included if you want to use a bitmap or icon on the
				// button. If you do not want to use an image on the button, simply comment
				// out the '#include "PJAImage.h"' line below, and the button will have the
				// ellipses drawn on it. If you include "PJAImage.h" you have to add the 
				// "PJAImage.cpp" file to your project.
				#include "PJAImage.h"
				
				////////////////////////////////////////////////////////////////////////////
				// CFileEditCtrl control
				
				// Flags used by dwFlags parameter of the Create(), SetFlags() and DDX_FileEditCtrl() functions
				// also returned by GetFlags() and used by ModifyFlags()
				//
				// Usage :
				// FEC_FILE               - Obsolete - use FEC_FILEOPEN instead
				// FEC_MULTIPLE           - used with FEC_FILE, the control is used to find multiple files (same as OFN_ALLOWMULTISELECT)
				// FEC_FOLDER             - the control is used to find folders, can not be used with FEC_FILE
				// FEC_TRAILINGSLASH      - used with FEC_FOLDER, adds a slash to the end of the folder string
				// FEC_BUTTONLEFT         - places the button on the left side of the control
				// FEC_BUTTONTIP          - enables the tooltip for the browse button
				// FEC_CLIENTTIP          - enables the tooltip for the client area
				// FEC_WILDCARDS          - used with FEC_FILE, the control resolves wildcards ('*' and '?') in the file name
				// FEC_NODEREFERENCELINKS - used with FEC_FILE, the control will return the pathname of the shortcut (*.lnk & *.pif) file.
				//                          by default, the control returns the pathname of the file referenced by the shortcut
				//                          (same as OFN_NODEREFERENCELINKS)
				// FEC_AUTOCOMPLETE       - adds an autocompletion feature to the control ( a work in progress )
				// FEC_FLAT               - the control is displayed as a flat, hot to mouse control
				// FEC_GRAYSCALE          - used with FEC_FLAT, the button's dots/image is drawn in gray when the control is flat
				// FEC_FILEOPEN           - the control is used to find a file and the browse button starts a FileOpen dialog,
				//                          can not be used with FEC_FOLDER or FEC_FILESAVEAS
				// FEC_FILESAVEAS         - the control is used to find a file and the browse button starts a FileSaveAs dialog,
				//                          can not be used with FEC_FOLDER or FEC_FILEOPEN
				
				#define FEC_FILE               0x00000001   /* Obsolete - use FEC_FILEOPEN instead */
				#define FEC_MULTIPLE           0x00000002
				#define FEC_MULTIPLEFILES      0x00000003   /* FEC_FILE | FEC_MULTIPLE */
				#define FEC_FOLDER             0x00000004
				#define FEC_TRAILINGSLASH      0x00000008
				#define FEC_BUTTONLEFT         0x00000010
				#define FEC_BUTTONTIP          0x00000020
				#define FEC_CLIENTTIP          0x00000040
				#define FEC_WILDCARDS          0x00000080
				#define FEC_NODEREFERENCELINKS 0x00000100
				#define FEC_AUTOCOMPLETE       0x00000200   /* Not yet implemented */
				#define FEC_FLAT               0x00000400
				#define FEC_GRAYSCALE          0x00000800
				#define FEC_FILEOPEN           FEC_FILE
				#define FEC_FILESAVEAS         0x00001000
				
				class CFileEditCtrl : public CEdit
				{
				    DECLARE_DYNAMIC (CFileEditCtrl)
				
				public:
				// Constructor & Destructor
				    CFileEditCtrl(BOOL bAutoDelete = FALSE);    // constructor
				    virtual ~CFileEditCtrl();                   // destructor
				
				// Overrides
				    virtual BOOL Create(DWORD dwFlags,          // FEC_* flags
				                        DWORD dwExStyle,        // WS_EX_* styles
				                        LPCTSTR lpszWindowName, // initial text
				                        DWORD dwStyle,          // WS_* and ES_* styles
				                        const RECT& rect,       // control's size and position
				                        CWnd* pParentWnd,       // control's parent window
				                        UINT nID);              // control's ID
				    virtual BOOL PreTranslateMessage(MSG* pMsg);
				protected:
				    virtual void PostNcDestroy();
				
				public:
				// User functions
					void SetFilter(CString strFilter)			//hpxs , 设置对话框过滤器
					{
						m_strFilter = strFilter;
					}
					void SetCaption(CString strCaption)			//hpxs , 设置对话框Caption
					{
						m_szCaption = strCaption;
					}
				    BROWSEINFO* GetBrowseInfo() const;      // returns a pointer to the internal BROWSEINFO structure
				    int GetButtonWidth();                   // returns the width, in pixels, of the browse button
				    DWORD GetFlags();                       // returns the control's functionality
				    CString GetNextPathName(POSITION &pos); // get the file at pos and then update pos
				    OPENFILENAME* GetOpenFileName() const;  // returns a pointer to the internal OPENFILENAME structure
				    POSITION GetStartPosition();            // get the starting position for GetNextPathName()
				    BOOL ModifyFlags(DWORD remove, DWORD add); // modifies the control's functionality
				    int SetButtonWidth(int width = -1);     // sets the width of the browse button (-1 is use default width)
				    void SetClientTipText(CString text);    // sets the text for the client area tooltip
				    BOOL SetFlags(DWORD dwFlags);           // sets the control's functionality
				
				#ifdef AFX_PJAIMAGE_H__F15965B0_B05A_11D4_B625_A1459D96AB20__INCLUDED_
				    BOOL SetButtonImage(HANDLE hImage, DWORD PJAIFlags, COLORREF Transparent = CLR_DEFAULT); // set the image for the browse button
				#endif
				
				protected:
				// Internal methods
				    void AddFile(CString FileName);         // adds files to the m_files array
				    void ButtonClicked();                   // handles a mouse click on the button
				    BOOL DereferenceLink(CString &FileName);// resolves shortcut (*.lnk and *.pif) files
				    void DrawButton (int nButtonState = 0); // draws the button
				    void DrawDots (CDC *pDC, COLORREF CR, int nOffset = 0); // draws the dots on the button
				    void ExpandWildCards(const CString &FileName); // handles wildcards in file names
				    BOOL FECBrowseForFolder();              // starts and handles the returns from the SHBrowseForFolder() shell function
				    BOOL FECOpenFile();                     // starts and handles the returns from the CFileDialog
				    void FillBuffers();                     // fills the buffers used by GetStartPosition() and GetNextPathName() functions
				    BOOL GetValidFolder(LPTSTR Path);       // converts Path to an existing folder path
					void Redraw (BOOL Flat);                // redraws the borders if the FEC_FLAT flag is set
				    BOOL ScreenPointInButtonRect(CPoint point); // checks if the given point is in the browse button
					BOOL m_bIsFocused;
					BOOL m_bIsMouseOver;
					virtual void DrawEdge(void);
				
				// Message handlers
				    BOOL OnTTNNeedText(UINT id, NMHDR* pTTTStruct, LRESULT* pResult); // Set the tooltip text
				    afx_msg BOOL OnChange();
				    afx_msg LRESULT OnSetReadOnly(WPARAM, LPARAM);
				    afx_msg LRESULT OnSetText(WPARAM, LPARAM);
				    afx_msg void OnDropFiles(HDROP hDropInfo);
				    afx_msg void OnEnable(BOOL bEnable);
				    afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
				    afx_msg void OnKillFocus(CWnd *pNewWnd);
				    afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
				    afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
				    afx_msg void OnMouseMove(UINT nFlags, CPoint point);
				    afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp);
				    afx_msg UINT OnNcHitTest(CPoint point);
				    afx_msg void OnNcLButtonDblClk(UINT nHitTest, CPoint point);
				    afx_msg void OnNcLButtonDown(UINT nHitTest, CPoint point);
				    afx_msg void OnNcMouseMove(UINT nHitTest, CPoint point);
				    afx_msg void OnNcPaint();
				    afx_msg void OnSetFocus(CWnd* pOldWnd);
				    afx_msg void OnSize(UINT nType, int cx, int cy);
				
				    DECLARE_MESSAGE_MAP()
				
				// member variables
				private:
					CString			 m_strFilter;			//hpxs 对话框过虑器,默认为所有文件
				    BOOL             m_bAutoDelete;         // delete this in PostNCDestroy() handler?
				    DWORD            m_bButtonLeft;         // browse button on left side of control?
				    BOOL             m_bMouseCaptured;      // button has captured the mouse?
				    BOOL             m_bTextChanged;        // window text has changed since last time FillBuffers() was called
				    DWORD            m_dwFlags;             // control flags - do not access this member directly, use GetFlags() instead
					DWORD            m_dwImageDrawFlags;    // button image flags
				    CStringList      m_Files;               // linked list of file names
				    int              m_nButtonState;        // current button state (up, down, or disabled)
				    int              m_nButtonWidth;        // the width of the button (-1 is default)
				    BROWSEINFO*      m_pBROWSEINFO;         // only active when FEC_FOLDER flag is set
				    CRect            m_rcButtonRect;        // window coordinates of the button
				    CString          m_szCaption;           // caption of CFileDialog
				    CString          m_szClientTip;         // client area tooltip text
				    CString          m_szFolder;            // absolute path to first file in m_Files.
				    CToolTipCtrl     m_ToolTip;             // tooltip control
				
				#ifdef AFX_PJAIMAGE_H__F15965B0_B05A_11D4_B625_A1459D96AB20__INCLUDED_
				    CPJAImage*       m_pButtonImage;        // pointer to the button image class
				#endif
				};
				
				/////////////////////////////////////////////////////////////////////////////
				// FEC_NOTIFY structure
				
				// A pointer to this structure is sent to the parent window of the CFileEditCtrl as the
				// NMHDR* pNMHDR parameter in a WM_NOTIFY message. It is sent with the FEC_NM_PREBROWSE
				// notification after the user has clicked on the browse button, but before the CFileDialog
				// or SHBrowseForFolder dialogs are displayed. Setting the LRESULT parameter of the OnNotify
				// handler to a nonzero value will stop the dialogs from executing. It is sent with the
				// FEC_NM_POSTBROWSE notification after the user closed the dialog. pNewText will be NULL
				// if the user canceled the dialog, and pNewText will point to a CString containing the
				// new window text if the user clicked the 'OK' button to make a new selection.
				// Setting the LRESULT parameter of the OnNotify handler to a nonzero value will stop the
				// control from updating it's text
				
				typedef struct tagFEC_NOTIFY {
				    NMHDR hdr;
				    CFileEditCtrl* pFEC;                    // pointer to control that sends this notification
				    CString *pNewText;                      // pointer to the updated text, used by FEC_NM_POSTBROWSE and FEC_NM_DROP
				    tagFEC_NOTIFY (CFileEditCtrl *FEC, UINT code); // Constructor
				} FEC_NOTIFY;
				
				#define FEC_NM_PREBROWSE          1         // notification code sent before dialogs pop up
				#define FEC_NM_POSTBROWSE         2         // sent after dialogs successfully return
				#define FEC_NM_DROP               3         // sent when user drops files onto control
				
				/////////////////////////////////////////////////////////////////////////////
				// DDV_/DDX_FileEditCtrl functions
				
				void DDV_FileEditCtrl (CDataExchange *pDX, int nIDC);   // verify that the file/folder entered exists
				void DDX_FileEditCtrl (CDataExchange *pDX, int nIDC, CFileEditCtrl &rCFEC, DWORD dwFlags); // setup the control
				void DDX_FileEditCtrl (CDataExchange *pDX, int nIDC, CString& rStr, DWORD dwFlags);        // setup the control
				/////////////////////////////////////////////////////////////////////////////
				// FECFolderProc callback function used by SHBrowseForFolder function
				
				int CALLBACK FECFolderProc(HWND hWnd, UINT nMsg, LPARAM, LPARAM lpData);
				
				#endif // !defined(AFX_FILEEDITCTRL_H__F15965B0_B05A_11D4_B625_A1459D96AB20__INCLUDED_)
				
				/////////////////////////////////////////////////////////////////////////////
				//
				//  End of FileEditCtrl.h
				//
				/////////////////////////////////////////////////////////////////////////////
							

相关资源