📄 win32ceguirendererselector.cpp
字号:
// 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("Cancel"));
buffer += charCount * sizeof(WORD);
// no creation data
*reinterpret_cast<LPWORD>(buffer) = 0x0000;
buffer += sizeof(WORD);
// align pointer for next item
buffer = alignPointer(buffer);
//
// Combo label
//
item = reinterpret_cast<LPDLGITEMTEMPLATE>(buffer);
item->style = SS_LEFT|WS_VISIBLE|WS_CHILD|WS_GROUP;
item->dwExtendedStyle = 0;
item->x = 8;
item->y = 7;
item->cx = 130;
item->cy = 12;
item->id = 0;
// advance buffer pointer
buffer += sizeof(DLGITEMTEMPLATE);
// write class information
*reinterpret_cast<LPWORD>(buffer) = 0xFFFF;
buffer += sizeof(WORD);
*reinterpret_cast<LPWORD>(buffer) = 0x0082;
buffer += sizeof(WORD);
// write caption
charCount = copyAnsiToWideChar(buffer, TEXT("Select Renderer to Use:"));
buffer += charCount * sizeof(WORD);
// no creation data
*reinterpret_cast<LPWORD>(buffer) = 0x0000;
buffer += sizeof(WORD);
// align pointer for next item
buffer = alignPointer(buffer);
//
// Combobox
//
item = reinterpret_cast<LPDLGITEMTEMPLATE>(buffer);
item->style = CBS_DROPDOWNLIST|WS_VISIBLE|WS_CHILD;
item->dwExtendedStyle = 0;
item->x = 8;
item->y = 19;
item->cx = 130;
item->cy = 100;
item->id = 1000;
// advance buffer pointer
buffer += sizeof(DLGITEMTEMPLATE);
// write class information
*reinterpret_cast<LPWORD>(buffer) = 0xFFFF;
buffer += sizeof(WORD);
*reinterpret_cast<LPWORD>(buffer) = 0x0085;
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);
return dialogTemplate;
}
return 0;
}
/*************************************************************************
Win32 dialog procedure function
*************************************************************************/
INT_PTR CALLBACK Win32CEGuiRendererSelector::dialogProcedure(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
{
// get the 'this' ptr we were passed
Win32CEGuiRendererSelector* obj = reinterpret_cast<Win32CEGuiRendererSelector*>(lParam);
// set as window long for future use
SetWindowLong(hDlg, DWL_USER, static_cast<LONG>(lParam));
//
// Set-up combo box list
//
// get combo control
HWND combo = GetDlgItem(hDlg, 1000);
if (combo)
{
// basic control setup
int idx;
// clear old data
SendMessage(combo, CB_RESETCONTENT, 0, 0);
// add new stings according to if item is enabled or not
if (obj->d_rendererAvailability[OgreGuiRendererType])
{
idx = static_cast<int>(SendMessage(combo, CB_ADDSTRING, 0, reinterpret_cast<LPARAM>(_TEXT("Ogre Engine Renderer"))));
SendMessage(combo, CB_SETITEMDATA, idx, OgreGuiRendererType);
}
if (obj->d_rendererAvailability[Direct3D81GuiRendererType])
{
idx = static_cast<int>(SendMessage(combo, CB_ADDSTRING, 0, reinterpret_cast<LPARAM>(_TEXT("Microsoft Direct3D 8.1 Renderer"))));
SendMessage(combo, CB_SETITEMDATA, idx, Direct3D81GuiRendererType);
}
if (obj->d_rendererAvailability[Direct3D9GuiRendererType])
{
idx = static_cast<int>(SendMessage(combo, CB_ADDSTRING, 0, reinterpret_cast<LPARAM>(_TEXT("Microsoft Direct3D 9 Renderer"))));
SendMessage(combo, CB_SETITEMDATA, idx, Direct3D9GuiRendererType);
}
if (obj->d_rendererAvailability[OpenGLGuiRendererType])
{
idx = static_cast<int>(SendMessage(combo, CB_ADDSTRING, 0, reinterpret_cast<LPARAM>(_TEXT("OpenGL Renderer"))));
SendMessage(combo, CB_SETITEMDATA, idx, OpenGLGuiRendererType);
}
if (obj->d_rendererAvailability[IrrlichtGuiRendererType])
{
idx = static_cast<int>(SendMessage(combo, CB_ADDSTRING, 0, reinterpret_cast<LPARAM>(_TEXT("Irrlicht Engine Renderer"))));
SendMessage(combo, CB_SETITEMDATA, idx, IrrlichtGuiRendererType);
}
}
return FALSE;
}
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
EndDialog(hDlg, 1);
return TRUE;
case IDCANCEL:
EndDialog(hDlg, 0);
return TRUE;
// Combo-box
case 1000:
switch(HIWORD(wParam))
{
case CBN_SELENDOK:
{
HWND combo = reinterpret_cast<HWND>(lParam);
// get the 'this' ptr for the object we were created by
Win32CEGuiRendererSelector* obj = reinterpret_cast<Win32CEGuiRendererSelector*>(GetWindowLong(hDlg, DWL_USER));
int idx = static_cast<int>(SendMessage(combo, CB_GETCURSEL, 0, 0));
if (idx != CB_ERR)
{
// set last selected renderer type
obj->d_lastSelected = static_cast<CEGuiRendererType>(SendMessage(combo, CB_GETITEMDATA, idx, 0));
}
return TRUE;
}
}
}
break;
}
return FALSE;
}
/*************************************************************************
Take an input pointer, return closest pointer that is aligned on a
DWORD (4 byte) boundary.
*************************************************************************/
LPBYTE Win32CEGuiRendererSelector::alignPointer(LPBYTE buff)
{
DWORD_PTR ul = reinterpret_cast<DWORD_PTR>(buff);
ul +=3;
ul >>=2;
ul <<=2;
return reinterpret_cast<LPBYTE>(ul);
}
/*************************************************************************
Converts the Ansi string in 'pAnsiIn' into wide characters and
copies the result into the WORD array at 'pWCStr'.
*************************************************************************/
int Win32CEGuiRendererSelector::copyAnsiToWideChar(LPBYTE outBuff, PTSTR ansiString)
{
LPWSTR pWCStr = reinterpret_cast<LPWSTR>(outBuff);
# ifdef UNICODE
return lstrlen(lstrcpy(pWCStr, ansiString)) + 1;
# else
int cchAnsi = lstrlen(ansiString);
return MultiByteToWideChar(GetACP(), MB_PRECOMPOSED, ansiString, cchAnsi, pWCStr, cchAnsi) + 1;
# endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -