win32graphicstoolkit.cpp
来自「这是VCF框架的代码」· C++ 代码 · 共 435 行 · 第 1/2 页
CPP
435 行
//Win32GraphicsToolkit.cpp/*Copyright 2000-2004 The VCF Project.Please see License.txt in the top level directorywhere you installed the VCF.*///Win32GraphicsToolkit.h#include "vcf/GraphicsKit/GraphicsKit.h"#include "vcf/GraphicsKit/GraphicsKitPrivate.h"#include <commdlg.h>#include "vcf/GraphicsKit/PrintSessionPeer.h"#include "vcf/GraphicsKit/Win32PrintSession.h"#include "vcf/FoundationKit/ResourceBundle.h"#include "vcf/FoundationKit/ResourceBundlePeer.h"#include "vcf/GraphicsKit/GraphicsResourceBundlePeer.h"#include "vcf/GraphicsKit/Win32GraphicsResourceBundle.h"#include "vcf/GraphicsKit/Win32VisualStylesWrapper.h"//init singletonWin32VisualStylesWrapper Win32VisualStylesWrapper::Instance;using namespace VCF;Win32FontManager* Win32FontManager::win32FontMgr = NULL;Win32GraphicsToolkit::Win32GraphicsToolkit(): systemFont_(NULL){ Win32FontManager::create(); loadSystemColors(); registerImageLoader( "image/bmp", new BMPLoader() ); initSystemFont(); }Win32GraphicsToolkit::~Win32GraphicsToolkit(){ systemFont_->free(); Win32FontManager::getFontManager()->free();}void Win32GraphicsToolkit::internal_systemSettingsChanged(){ StringUtils::trace( "Win32GraphicsToolkit::internal_systemSettingsChanged()\n" ); if ( System::isUnicodeEnabled() ) { HFONT defGUIFont = (HFONT)GetStockObject( DEFAULT_GUI_FONT ); LOGFONTW lf = {0}; GetObjectW( defGUIFont, sizeof(LOGFONTW), &lf ); systemFont_->setBold( (lf.lfWeight == FW_BOLD) ? true : false ); systemFont_->setItalic( lf.lfItalic == TRUE ); systemFont_->setUnderlined( lf.lfUnderline == TRUE ); systemFont_->setStrikeOut( lf.lfStrikeOut == TRUE ); systemFont_->setPixelSize( lf.lfHeight ); systemFont_->setName( String(lf.lfFaceName) ); } else { HFONT defGUIFont = (HFONT)GetStockObject( DEFAULT_GUI_FONT ); LOGFONTA lf = {0}; GetObjectA( defGUIFont, sizeof(LOGFONTA), &lf ); systemFont_->setBold( (lf.lfWeight == FW_BOLD) ? true : false ); systemFont_->setItalic( lf.lfItalic == TRUE ); systemFont_->setUnderlined( lf.lfUnderline == TRUE ); systemFont_->setStrikeOut( lf.lfStrikeOut == TRUE ); systemFont_->setPixelSize( lf.lfHeight ); systemFont_->setName( String(lf.lfFaceName) ); } systemColorNameMap_->clear(); std::map<unsigned long,Color*>::iterator it = systemColors_.begin(); while ( it != systemColors_.end() ){ delete it->second; it++; } systemColors_.clear(); loadSystemColors();}void Win32GraphicsToolkit::initSystemFont(){ systemFont_ = new Font(); if ( System::isUnicodeEnabled() ) { HFONT defGUIFont = (HFONT)GetStockObject( DEFAULT_GUI_FONT ); LOGFONTW lf = {0}; GetObjectW( defGUIFont, sizeof(LOGFONTW), &lf ); systemFont_->setBold( (lf.lfWeight == FW_BOLD) ? true : false ); systemFont_->setItalic( lf.lfItalic == TRUE ); systemFont_->setUnderlined( lf.lfUnderline == TRUE ); systemFont_->setStrikeOut( lf.lfStrikeOut == TRUE ); systemFont_->setPixelSize( lf.lfHeight ); systemFont_->setName( String(lf.lfFaceName) ); } else { HFONT defGUIFont = (HFONT)GetStockObject( DEFAULT_GUI_FONT ); LOGFONTA lf = {0}; GetObjectA( defGUIFont, sizeof(LOGFONTA), &lf ); systemFont_->setBold( (lf.lfWeight == FW_BOLD) ? true : false ); systemFont_->setItalic( lf.lfItalic == TRUE ); systemFont_->setUnderlined( lf.lfUnderline == TRUE ); systemFont_->setStrikeOut( lf.lfStrikeOut == TRUE ); systemFont_->setPixelSize( lf.lfHeight ); systemFont_->setName( String(lf.lfFaceName) ); }}ContextPeer* Win32GraphicsToolkit::internal_createContextPeer( OSHandleID contextID ){ ContextPeer* result = NULL; result = new Win32Context( contextID ); return result;}ContextPeer* Win32GraphicsToolkit::internal_createContextPeer( const unsigned long& width, const unsigned long& height ){ return new Win32Context( width, height );}FontPeer* Win32GraphicsToolkit::internal_createFontPeer( const String& fontName ){ return new Win32Font( fontName );}FontPeer* Win32GraphicsToolkit::internal_createFontPeer( const String& fontName, const double& pointSize ){ return new Win32Font( fontName, pointSize );}Image* Win32GraphicsToolkit::internal_createImage( const unsigned long& width, const unsigned long& height, const Image::ImageType& imageType ){ return new Win32Image( width, height );}Image* Win32GraphicsToolkit::internal_createImage( GraphicsContext* context, Rect* rect, const Image::ImageType& imageType ){ if ( NULL != context ){ return new Win32Image( context, rect ); } else { return NULL; }}double Win32GraphicsToolkit::internal_getDPI( GraphicsContext* context ){ double result = 0.0; if ( NULL == context ) { HDC dc = GetDC( ::GetDesktopWindow() ); result = (double)GetDeviceCaps( dc, LOGPIXELSY); ReleaseDC( ::GetDesktopWindow(), dc ); } else { result = (double) GetDeviceCaps( (HDC)context->getPeer()->getContextID(), LOGPIXELSY ); } return result;}PrintSessionPeer* Win32GraphicsToolkit::internal_createPrintSessionPeer(){ return new Win32PrintSession();}void Win32GraphicsToolkit::loadSystemColors(){ Color* sysColor = NULL; sysColor = new Color( ::GetSysColor( COLOR_BTNSHADOW ), Color::cpsABGR ); systemColors_[SYSCOLOR_SHADOW] = sysColor; (*systemColorNameMap_)[*sysColor] = "SYSCOLOR_SHADOW"; sysColor = new Color( ::GetSysColor( COLOR_3DFACE ), Color::cpsABGR ); systemColors_[SYSCOLOR_FACE] = sysColor; (*systemColorNameMap_)[*sysColor] = "SYSCOLOR_FACE"; sysColor = new Color( ::GetSysColor( COLOR_3DHILIGHT ), Color::cpsABGR ); systemColors_[SYSCOLOR_HIGHLIGHT] = sysColor; (*systemColorNameMap_)[*sysColor] = "SYSCOLOR_HIGHLIGHT"; sysColor = new Color( ::GetSysColor( COLOR_ACTIVECAPTION ), Color::cpsABGR ); systemColors_[SYSCOLOR_ACTIVE_CAPTION] = sysColor; (*systemColorNameMap_)[*sysColor] = "SYSCOLOR_ACTIVE_CAPTION"; sysColor = new Color( ::GetSysColor( COLOR_ACTIVEBORDER ), Color::cpsABGR ); systemColors_[SYSCOLOR_ACTIVE_BORDER] = sysColor; (*systemColorNameMap_)[*sysColor] = "SYSCOLOR_ACTIVE_BORDER"; sysColor = new Color( ::GetSysColor( COLOR_DESKTOP ), Color::cpsABGR ); systemColors_[SYSCOLOR_DESKTOP] = sysColor; (*systemColorNameMap_)[*sysColor] = "SYSCOLOR_DESKTOP"; sysColor = new Color( ::GetSysColor( COLOR_CAPTIONTEXT ), Color::cpsABGR ); systemColors_[SYSCOLOR_CAPTION_TEXT] = sysColor; (*systemColorNameMap_)[*sysColor] = "SYSCOLOR_CAPTION_TEXT"; sysColor = new Color( ::GetSysColor( COLOR_HIGHLIGHT ), Color::cpsABGR ); systemColors_[SYSCOLOR_SELECTION] = sysColor;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?