?? private.h
字號(hào):
/////////////////////////////////////////////////////////////////////////////// Name: wx/msw/private.h// Purpose: Private declarations: as this header is only included by// wxWidgets itself, it may contain identifiers which don't start// with "wx".// Author: Julian Smart// Modified by:// Created: 01/02/97// RCS-ID: $Id: private.h,v 1.157 2006/10/26 19:12:52 VZ Exp $// Copyright: (c) Julian Smart// Licence: wxWindows licence/////////////////////////////////////////////////////////////////////////////#ifndef _WX_PRIVATE_H_#define _WX_PRIVATE_H_#include "wx/msw/wrapwin.h"#ifdef __WXMICROWIN__ // Extra prototypes and symbols not defined by MicroWindows #include "wx/msw/microwin.h"#endif#include "wx/log.h"class WXDLLEXPORT wxFont;class WXDLLEXPORT wxWindow;class WXDLLEXPORT wxWindowBase;// ---------------------------------------------------------------------------// private constants// ---------------------------------------------------------------------------// 260 was taken from windef.h#ifndef MAX_PATH #define MAX_PATH 260#endif// ---------------------------------------------------------------------------// standard icons from the resources// ---------------------------------------------------------------------------#if wxUSE_GUIextern WXDLLEXPORT_DATA(HICON) wxSTD_FRAME_ICON;extern WXDLLEXPORT_DATA(HICON) wxSTD_MDIPARENTFRAME_ICON;extern WXDLLEXPORT_DATA(HICON) wxSTD_MDICHILDFRAME_ICON;extern WXDLLEXPORT_DATA(HICON) wxDEFAULT_FRAME_ICON;extern WXDLLEXPORT_DATA(HICON) wxDEFAULT_MDIPARENTFRAME_ICON;extern WXDLLEXPORT_DATA(HICON) wxDEFAULT_MDICHILDFRAME_ICON;extern WXDLLEXPORT_DATA(HFONT) wxSTATUS_LINE_FONT;#endif // wxUSE_GUI// ---------------------------------------------------------------------------// global data// ---------------------------------------------------------------------------extern WXDLLIMPEXP_DATA_BASE(HINSTANCE) wxhInstance;// ---------------------------------------------------------------------------// define things missing from some compilers' headers// ---------------------------------------------------------------------------#if defined(__WXWINCE__) || (defined(__GNUWIN32__) && !wxUSE_NORLANDER_HEADERS)#ifndef ZeroMemory inline void ZeroMemory(void *buf, size_t len) { memset(buf, 0, len); }#endif#endif // old mingw32// this defines a CASTWNDPROC macro which casts a pointer to the type of a// window proc#if defined(STRICT) || defined(__GNUC__) typedef WNDPROC WndProcCast;#else typedef FARPROC WndProcCast;#endif#define CASTWNDPROC (WndProcCast)// ---------------------------------------------------------------------------// some stuff for old Windows versions (FIXME: what does it do here??)// ---------------------------------------------------------------------------#if !defined(APIENTRY) // NT defines APIENTRY, 3.x not #define APIENTRY FAR PASCAL#endif#ifdef __WIN32__ #define _EXPORT#else #define _EXPORT _export#endif#ifndef __WIN32__ typedef signed short int SHORT;#endif#if !defined(__WIN32__) // 3.x uses FARPROC for dialogs#ifndef STRICT #define DLGPROC FARPROC#endif#endif/* * Decide what window classes we're going to use * for this combination of CTl3D/FAFA settings */#define STATIC_CLASS wxT("STATIC")#define STATIC_FLAGS (SS_LEFT|WS_CHILD|WS_VISIBLE)#define CHECK_CLASS wxT("BUTTON")#define CHECK_FLAGS (BS_AUTOCHECKBOX|WS_TABSTOP|WS_CHILD)#define CHECK_IS_FAFA FALSE#define RADIO_CLASS wxT("BUTTON")#define RADIO_FLAGS (BS_AUTORADIOBUTTON|WS_CHILD|WS_VISIBLE)#define RADIO_SIZE 20#define RADIO_IS_FAFA FALSE#define PURE_WINDOWS#define GROUP_CLASS wxT("BUTTON")#define GROUP_FLAGS (BS_GROUPBOX|WS_CHILD|WS_VISIBLE)/*#define BITCHECK_FLAGS (FB_BITMAP|FC_BUTTONDRAW|FC_DEFAULT|WS_VISIBLE)#define BITRADIO_FLAGS (FC_BUTTONDRAW|FB_BITMAP|FC_RADIO|WS_CHILD|WS_VISIBLE)*/// ---------------------------------------------------------------------------// misc macros// ---------------------------------------------------------------------------#define MEANING_CHARACTER '0'#define DEFAULT_ITEM_WIDTH 100#define DEFAULT_ITEM_HEIGHT 80// Scale font to get edit control height//#define EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy) (3*(cy)/2)#define EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy) (cy+8)// Generic subclass proc, for panel item moving/sizing and intercept// EDIT control VK_RETURN messagesextern LONG APIENTRY _EXPORT wxSubclassedGenericControlProc(WXHWND hWnd, WXUINT message, WXWPARAM wParam, WXLPARAM lParam);// ---------------------------------------------------------------------------// useful macros and functions// ---------------------------------------------------------------------------// a wrapper macro for ZeroMemory()#if defined(__WIN32__) && !defined(__WXMICROWIN__)#define wxZeroMemory(obj) ::ZeroMemory(&obj, sizeof(obj))#else#define wxZeroMemory(obj) memset((void*) & obj, 0, sizeof(obj))#endif// This one is a macro so that it can be tested with #ifdef, it will be// undefined if it cannot be implemented for a given compiler.// Vc++, bcc, dmc, ow, mingw, codewarrior (and rsxnt) have _get_osfhandle.// Cygwin has get_osfhandle. Others are currently unknown, e.g. Salford,// Intel, Visual Age.#if defined(__WXWINCE__) #define wxGetOSFHandle(fd) ((HANDLE)fd) #define wxOpenOSFHandle(h, flags) ((int)wxPtrToUInt(h))#elif defined(__CYGWIN__) #define wxGetOSFHandle(fd) ((HANDLE)get_osfhandle(fd))#elif defined(__VISUALC__) \ || defined(__BORLANDC__) \ || defined(__DMC__) \ || defined(__WATCOMC__) \ || defined(__MINGW32__) \ || (defined(__MWERKS__) && defined(__MSL__)) #define wxGetOSFHandle(fd) ((HANDLE)_get_osfhandle(fd)) #define wxOpenOSFHandle(h, flags) (_open_osfhandle(wxPtrToUInt(h), flags)) #define wx_fdopen _fdopen#endif// close the handle in the class dtorclass AutoHANDLE{public: wxEXPLICIT AutoHANDLE(HANDLE handle) : m_handle(handle) { } bool IsOk() const { return m_handle != INVALID_HANDLE_VALUE; } operator HANDLE() const { return m_handle; } ~AutoHANDLE() { if ( IsOk() ) ::CloseHandle(m_handle); }protected: HANDLE m_handle;};// a template to make initializing Windows styructs less painful: it zeroes all// the struct fields and also sets cbSize member to the correct value (and so// can be only used with structures which have this member...)template <class T>struct WinStruct : public T{ WinStruct() { ::ZeroMemory(this, sizeof(T)); // explicit qualification is required here for this to be valid C++ this->cbSize = sizeof(T); }};#if wxUSE_GUI#include "wx/gdicmn.h"#include "wx/colour.h"// make conversion from wxColour and COLORREF a bit less painfulinline COLORREF wxColourToRGB(const wxColour& c){ return RGB(c.Red(), c.Green(), c.Blue());}inline COLORREF wxColourToPalRGB(const wxColour& c){ return PALETTERGB(c.Red(), c.Green(), c.Blue());}inline wxColour wxRGBToColour(COLORREF rgb){ return wxColour(GetRValue(rgb), GetGValue(rgb), GetBValue(rgb));}inline void wxRGBToColour(wxColour& c, COLORREF rgb){ c.Set(GetRValue(rgb), GetGValue(rgb), GetBValue(rgb));}// get the standard colour map for some standard colours - see comment in this// function to understand why is it needed and when should it be used//// it returns a wxCOLORMAP (can't use COLORMAP itself here as comctl32.dll// might be not included/available) array of size wxSTD_COLOUR_MAX//// NB: if you change these colours, update wxBITMAP_STD_COLOURS in the// resources as well: it must have the same number of pixels!enum wxSTD_COLOUR{ wxSTD_COL_BTNTEXT, wxSTD_COL_BTNSHADOW, wxSTD_COL_BTNFACE, wxSTD_COL_BTNHIGHLIGHT, wxSTD_COL_MAX};struct WXDLLEXPORT wxCOLORMAP{ COLORREF from, to;};// this function is implemented in src/msw/window.cppextern wxCOLORMAP *wxGetStdColourMap();// create a wxRect from Windows RECTinline wxRect wxRectFromRECT(const RECT& rc){ return wxRect(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top);}// copy Windows RECT to our wxRectinline void wxCopyRECTToRect(const RECT& rc, wxRect& rect){ rect = wxRectFromRECT(rc);}// and vice versainline void wxCopyRectToRECT(const wxRect& rect, RECT& rc){ // note that we don't use wxRect::GetRight() as it is one of compared to // wxRectFromRECT() above rc.top = rect.y; rc.left = rect.x; rc.right = rect.x + rect.width; rc.bottom = rect.y + rect.height;}// translations between HIMETRIC units (which OLE likes) and pixels (which are// liked by all the others) - implemented in msw/utilsexc.cppextern void HIMETRICToPixel(LONG *x, LONG *y);extern void PixelToHIMETRIC(LONG *x, LONG *y);// Windows convention of the mask is opposed to the wxWidgets one, so we need// to invert the mask each time we pass one/get one to/from Windowsextern HBITMAP wxInvertMask(HBITMAP hbmpMask, int w = 0, int h = 0);// Creates an icon or cursor depending from a bitmap//// The bitmap must be valid and it should have a mask. If it doesn't, a default// mask is created using light grey as the transparent colour.extern HICON wxBitmapToHICON(const wxBitmap& bmp);// Same requirments as above apply and the bitmap must also have the correct// size.externHCURSOR wxBitmapToHCURSOR(const wxBitmap& bmp, int hotSpotX, int hotSpotY);// get (x, y) from DWORD - notice that HI/LOWORD can *not* be used because they// will fail on system with multiple monitors where the coords may be negative//// these macros are standard now (Win98) but some older headers don't have them#ifndef GET_X_LPARAM #define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp)) #define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp))#endif // GET_X_LPARAM// get the current state of SHIFT/CTRL keysinline bool wxIsShiftDown(){// return (::GetKeyState(VK_SHIFT) & 0x100) != 0; // Returns different negative values on WinME and WinNT, // so simply test for negative value. return ::GetKeyState(VK_SHIFT) < 0;}inline bool wxIsCtrlDown(){// return (::GetKeyState(VK_CONTROL) & 0x100) != 0; // Returns different negative values on WinME and WinNT, // so simply test for negative value. return ::GetKeyState(VK_CONTROL) < 0;}// wrapper around GetWindowRect() and GetClientRect() APIs doing error checking// for Win32inline RECT wxGetWindowRect(HWND hwnd){ RECT rect; if ( !::GetWindowRect(hwnd, &rect) ) wxLogLastError(_T("GetWindowRect")); return rect;}inline RECT wxGetClientRect(HWND hwnd){ RECT rect; if ( !::GetClientRect(hwnd, &rect) ) wxLogLastError(_T("GetClientRect")); return rect;}// ---------------------------------------------------------------------------// small helper classes// ---------------------------------------------------------------------------// create an instance of this class and use it as the HDC for screen, will// automatically release the DC going out of scopeclass ScreenHDC{public: ScreenHDC() { m_hdc = ::GetDC(NULL); } ~ScreenHDC() { ::ReleaseDC(NULL, m_hdc); } operator HDC() const { return m_hdc; }private: HDC m_hdc; DECLARE_NO_COPY_CLASS(ScreenHDC)};// the same as ScreenHDC but for window DCsclass WindowHDC{public: WindowHDC(HWND hwnd) { m_hdc = ::GetDC(m_hwnd = hwnd); } ~WindowHDC() { ::ReleaseDC(m_hwnd, m_hdc); } operator HDC() const { return m_hdc; }private: HWND m_hwnd; HDC m_hdc; DECLARE_NO_COPY_CLASS(WindowHDC)};// the same as ScreenHDC but for memory DCs: creates the HDC compatible with// the given one (screen by default) in ctor and destroys it in dtorclass MemoryHDC{public: MemoryHDC(HDC hdc = 0) { m_hdc = ::CreateCompatibleDC(hdc); } ~MemoryHDC() { ::DeleteDC(m_hdc); } operator HDC() const { return m_hdc; }private: HDC m_hdc; DECLARE_NO_COPY_CLASS(MemoryHDC)};// a class which selects a GDI object into a DC in its ctor and deselects in// dtorclass SelectInHDC{public: SelectInHDC(HDC hdc, HGDIOBJ hgdiobj) : m_hdc(hdc) { m_hgdiobj = ::SelectObject(hdc, hgdiobj); } ~SelectInHDC() { ::SelectObject(m_hdc, m_hgdiobj); } // return true if the object was successfully selected operator bool() const { return m_hgdiobj != 0; }private: HDC m_hdc; HGDIOBJ m_hgdiobj; DECLARE_NO_COPY_CLASS(SelectInHDC)};// a class which cleans up any GDI objectclass AutoGDIObject{protected: AutoGDIObject(HGDIOBJ gdiobj) : m_gdiobj(gdiobj) { } ~AutoGDIObject() { if ( m_gdiobj ) ::DeleteObject(m_gdiobj); } HGDIOBJ GetObject() const { return m_gdiobj; }private: HGDIOBJ m_gdiobj;};// TODO: all this asks for using a AutoHandler<T, CreateFunc> template...// a class for temporary pensclass AutoHBRUSH : private AutoGDIObject{public: AutoHBRUSH(COLORREF col) : AutoGDIObject(::CreateSolidBrush(col)) { } operator HBRUSH() const { return (HBRUSH)GetObject(); }};// a class for temporary pensclass AutoHPEN : private AutoGDIObject{public: AutoHPEN(COLORREF col) : AutoGDIObject(::CreatePen(PS_SOLID, 0, col)) { } operator HPEN() const { return (HPEN)GetObject(); }};
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -