📄 win32ceguirendererselector.cpp
字号:
/***********************************************************************
filename: Win32CEGuiRendererSelector.cpp
created: 24/9/2004
author: Paul D Turner
*************************************************************************/
/***************************************************************************
* Copyright (C) 2004 - 2006 Paul D Turner & The CEGUI Development Team
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
***************************************************************************/
#include "Win32CEGuiRendererSelector.h"
#include <TCHAR.H>
/*************************************************************************
Constructor
*************************************************************************/
Win32CEGuiRendererSelector::Win32CEGuiRendererSelector() :
d_template(createDialogTemplate())
{}
/*************************************************************************
Destructor
*************************************************************************/
Win32CEGuiRendererSelector::~Win32CEGuiRendererSelector()
{
if (d_template)
{
LocalFree(d_template);
}
}
/*************************************************************************
Display the dialog and wait for user
*************************************************************************/
bool Win32CEGuiRendererSelector::inkokeDialog()
{
if (d_template)
{
// show dialog & return result
return (1 == DialogBoxIndirectParam(GetModuleHandle(0), d_template, 0, Win32CEGuiRendererSelector::dialogProcedure, reinterpret_cast<LPARAM>(this)));
}
return false;
}
/*************************************************************************
Create Win32 dialog template
*************************************************************************/
LPDLGTEMPLATE Win32CEGuiRendererSelector::createDialogTemplate()
{
SIZE_T templateBufferSize = 1024;
// allocate memory to hold the template we're going to construct
LPDLGTEMPLATE dialogTemplate = static_cast<LPDLGTEMPLATE>(LocalAlloc(LPTR, templateBufferSize));
// if allocation was successful
if (dialogTemplate)
{
LPDLGITEMTEMPLATE item;
LPBYTE buffer = reinterpret_cast<LPBYTE>(dialogTemplate);
//
// build template header
//
LPDLGTEMPLATE header = reinterpret_cast<LPDLGTEMPLATE>(buffer);
header->style = DS_MODALFRAME|WS_CAPTION|WS_VISIBLE;
header->dwExtendedStyle = 0;
header->cdit = 6;
header->x = (short)0x8000;
header->y = (short)0x8000;
header->cx = 150;
header->cy = 75;
// advance buffer pointer
buffer += sizeof(DLGTEMPLATE);
//
// Write null menu and class names
//
*reinterpret_cast<LPWORD>(buffer) = 0;
buffer += sizeof(WORD);
*reinterpret_cast<LPWORD>(buffer) = 0;
buffer += sizeof(WORD);
//
// Write dialog title
//
int charCount = copyAnsiToWideChar(buffer, TEXT("CEGui - Renderer Selection"));
buffer += charCount * sizeof(WORD);
// align pointer for first item
buffer = alignPointer(buffer);
//
// Buttons area static frame
//
item = reinterpret_cast<LPDLGITEMTEMPLATE>(buffer);
item->style = BS_GROUPBOX|WS_VISIBLE|WS_CHILD;
item->dwExtendedStyle = 0;
item->x = 5;
item->y = 48;
item->cx = 140;
item->cy = 22;
item->id = 0;
// advance buffer pointer
buffer += sizeof(DLGITEMTEMPLATE);
// write class information
*reinterpret_cast<LPWORD>(buffer) = 0xFFFF;
buffer += sizeof(WORD);
*reinterpret_cast<LPWORD>(buffer) = 0x0080;
buffer += sizeof(WORD);
// write caption
charCount = copyAnsiToWideChar(buffer, TEXT(""));
buffer += charCount * sizeof(WORD);
// no creation data
*reinterpret_cast<LPWORD>(buffer) = 0x0000;
buffer += sizeof(WORD);
// align pointer for next item
buffer = alignPointer(buffer);
//
// Selection area static frame
//
item = reinterpret_cast<LPDLGITEMTEMPLATE>(buffer);
item->style = BS_GROUPBOX|WS_VISIBLE|WS_CHILD;
item->dwExtendedStyle = 0;
item->x = 5;
item->y = 0;
item->cx = 140;
item->cy = 50;
item->id = 0;
// advance buffer pointer
buffer += sizeof(DLGITEMTEMPLATE);
// write class information
*reinterpret_cast<LPWORD>(buffer) = 0xFFFF;
buffer += sizeof(WORD);
*reinterpret_cast<LPWORD>(buffer) = 0x0080;
buffer += sizeof(WORD);
// write caption
charCount = copyAnsiToWideChar(buffer, TEXT(""));
buffer += charCount * sizeof(WORD);
// no creation data
*reinterpret_cast<LPWORD>(buffer) = 0x0000;
buffer += sizeof(WORD);
// align pointer for next item
buffer = alignPointer(buffer);
//
// Okay button
//
item = reinterpret_cast<LPDLGITEMTEMPLATE>(buffer);
item->style = BS_DEFPUSHBUTTON|WS_VISIBLE|WS_CHILD|WS_TABSTOP;
item->dwExtendedStyle = 0;
item->x = 9;
item->y = 55;
item->cx = 40;
item->cy = 12;
item->id = IDOK;
// advance buffer pointer
buffer += sizeof(DLGITEMTEMPLATE);
// write class information
*reinterpret_cast<LPWORD>(buffer) = 0xFFFF;
buffer += sizeof(WORD);
*reinterpret_cast<LPWORD>(buffer) = 0x0080;
buffer += sizeof(WORD);
// write caption
charCount = copyAnsiToWideChar(buffer, TEXT("Go!"));
buffer += charCount * sizeof(WORD);
// no creation data
*reinterpret_cast<LPWORD>(buffer) = 0x0000;
buffer += sizeof(WORD);
// align pointer for next item
buffer = alignPointer(buffer);
//
// Cancel button
//
item = reinterpret_cast<LPDLGITEMTEMPLATE>(buffer);
item->style = BS_PUSHBUTTON|WS_VISIBLE|WS_CHILD|WS_TABSTOP;
item->dwExtendedStyle = 0;
item->x = 101;
item->y = 55;
item->cx = 40;
item->cy = 12;
item->id = IDCANCEL;
// advance buffer pointer
buffer += sizeof(DLGITEMTEMPLATE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -