Windows系统窗口消息支持
This commit is contained in:
parent
2bd057724f
commit
f6b2db005e
@ -43,6 +43,8 @@ public:
|
|||||||
|
|
||||||
virtual bool Init(int w,int h)
|
virtual bool Init(int w,int h)
|
||||||
{
|
{
|
||||||
|
InitNativeWindowSystem();
|
||||||
|
|
||||||
win=CreateRenderWindow(OS_TEXT("VulkanTest"));
|
win=CreateRenderWindow(OS_TEXT("VulkanTest"));
|
||||||
if(!win)
|
if(!win)
|
||||||
return(false);
|
return(false);
|
||||||
@ -80,14 +82,9 @@ public:
|
|||||||
device->QueuePresent();
|
device->QueuePresent();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Wait(double seconds)
|
bool Run()
|
||||||
{
|
{
|
||||||
#ifdef WIN32
|
win->MessageProc();
|
||||||
Sleep(seconds * 1000.0f);
|
return !win->IsClose();
|
||||||
#elif defined(__ANDROID__)
|
|
||||||
sleep(seconds);
|
|
||||||
#else
|
|
||||||
sleep(seconds);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
};//class VulkanApplicationFramework
|
};//class VulkanApplicationFramework
|
||||||
|
@ -169,7 +169,7 @@ int main(int,char **)
|
|||||||
app.AcquireNextFrame();
|
app.AcquireNextFrame();
|
||||||
app.Draw();
|
app.Draw();
|
||||||
|
|
||||||
app.Wait(0.5);
|
while(app.Run());
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -4,26 +4,26 @@
|
|||||||
namespace hgl
|
namespace hgl
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* 鼠标按钮枚举
|
* 鼠标状态枚举定义
|
||||||
*/
|
*/
|
||||||
enum MouseButton:int
|
enum MouseButton
|
||||||
{
|
{
|
||||||
mbLeft=0,
|
mbMove =0x00000001, ///<鼠标移动了
|
||||||
mbRight,
|
|
||||||
mbMiddle,
|
|
||||||
|
|
||||||
mbX1,
|
mbLeft =0x00000010, ///<鼠标左键处于按下状态
|
||||||
mbX2,
|
mbMid =0x00000100, ///<鼠标中键处于按下状态
|
||||||
|
mbRight =0x00001000, ///<鼠标右键处于按下状态
|
||||||
|
|
||||||
mbEnd
|
mbShift =0x10000000, ///<Shift键处于按下状态
|
||||||
};//enum MouseButton
|
mbCtrl =0x20000000, ///<Ctrl键处于按下状态
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 按键枚举定义
|
* 按键枚举定义
|
||||||
*/
|
*/
|
||||||
enum KeyboardButton
|
enum KeyboardButton
|
||||||
{
|
{
|
||||||
kb_NONE=0, ///<起始定义,无意义
|
kbBeginRange=0,
|
||||||
|
|
||||||
//主键盘区
|
//主键盘区
|
||||||
kbEsc, ///<ESC
|
kbEsc, ///<ESC
|
||||||
@ -154,7 +154,8 @@ namespace hgl
|
|||||||
kbNumDecimal, ///<小键盘 . (小数点/删除键)
|
kbNumDecimal, ///<小键盘 . (小数点/删除键)
|
||||||
kbNumEnter, ///<小键盘 回车键
|
kbNumEnter, ///<小键盘 回车键
|
||||||
|
|
||||||
kb_END ///<结束定义,无意义
|
kbEndRange,
|
||||||
|
kbRangeSize=kbEndRange-kbBeginRange+1
|
||||||
};//enum KeyboardButton
|
};//enum KeyboardButton
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -162,7 +163,7 @@ namespace hgl
|
|||||||
*/
|
*/
|
||||||
enum JoystickButton
|
enum JoystickButton
|
||||||
{
|
{
|
||||||
jbNone=0,
|
jbBeginRange=0,
|
||||||
|
|
||||||
jbUp,
|
jbUp,
|
||||||
jbDown,
|
jbDown,
|
||||||
@ -195,6 +196,9 @@ namespace hgl
|
|||||||
|
|
||||||
//XBOX/XBOX360
|
//XBOX/XBOX360
|
||||||
jbXBOX, //西瓜键
|
jbXBOX, //西瓜键
|
||||||
|
|
||||||
|
jbEndRange,
|
||||||
|
jbRangeSize=jbEndRange-jbBeginRange+1
|
||||||
};
|
};
|
||||||
}//namespace hgl
|
}//namespace hgl
|
||||||
#endif//HGL_INPUT_DEVICE_INCLUDE
|
#endif//HGL_INPUT_DEVICE_INCLUDE
|
||||||
|
@ -2,29 +2,60 @@
|
|||||||
#define HGL_GRAPH_WINDOW_INCLUDE
|
#define HGL_GRAPH_WINDOW_INCLUDE
|
||||||
|
|
||||||
#include<hgl/type/BaseString.h>
|
#include<hgl/type/BaseString.h>
|
||||||
|
#include<hgl/platform/InputDevice.h>
|
||||||
namespace hgl
|
namespace hgl
|
||||||
{
|
{
|
||||||
namespace graph
|
|
||||||
{
|
|
||||||
class Window
|
class Window
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
uint width,height;
|
uint width,height;
|
||||||
|
bool full_screen;
|
||||||
|
|
||||||
OSString win_name;
|
OSString win_name;
|
||||||
|
|
||||||
|
bool active;
|
||||||
|
bool is_close;
|
||||||
|
|
||||||
|
bool key_push[kbRangeSize];
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
uint GetWidth()const{return width;}
|
uint GetWidth()const{return width;}
|
||||||
uint GetHeight()const{return height;}
|
uint GetHeight()const{return height;}
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
virtual void OnMouseMove (int,int){}
|
||||||
|
virtual void OnMouseWheel (int,int, int){}
|
||||||
|
virtual void OnMouseDown (int,int,uint){}
|
||||||
|
virtual void OnMouseUp (int,int,uint){}
|
||||||
|
virtual void OnMouseDoubleClick (int,int,uint){}
|
||||||
|
|
||||||
|
//virtual void OnJoystickDown (uint){}
|
||||||
|
//virtual void OnJoystickPress (uint){}
|
||||||
|
//virtual void OnJoystickUp (uint){}
|
||||||
|
|
||||||
|
virtual void OnKeyDown (KeyboardButton);
|
||||||
|
virtual void OnKeyPress (KeyboardButton){}
|
||||||
|
virtual void OnKeyUp (KeyboardButton);
|
||||||
|
|
||||||
|
virtual void OnChar (os_char){}
|
||||||
|
|
||||||
|
virtual void OnResize (int w,int h){width=w;height=h;}
|
||||||
|
|
||||||
|
virtual void OnActive (bool a){active=a;}
|
||||||
|
virtual void OnClose (){is_close=true;}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
Window(const OSString &wn)
|
Window(const OSString &wn)
|
||||||
{
|
{
|
||||||
width=height=0;
|
width=height=0;
|
||||||
win_name=wn;
|
win_name=wn;
|
||||||
|
active=false;
|
||||||
|
is_close=true;
|
||||||
|
hgl_zero(key_push);
|
||||||
}
|
}
|
||||||
virtual ~Window()=default;
|
virtual ~Window()=default;
|
||||||
|
|
||||||
@ -32,11 +63,23 @@ namespace hgl
|
|||||||
virtual bool Create(uint,uint,uint)=0;
|
virtual bool Create(uint,uint,uint)=0;
|
||||||
virtual void Close()=0;
|
virtual void Close()=0;
|
||||||
|
|
||||||
|
bool IsClose()const{return is_close;}
|
||||||
|
|
||||||
|
virtual void SetCaption(const OSString &)=0;
|
||||||
|
|
||||||
virtual void Show()=0;
|
virtual void Show()=0;
|
||||||
virtual void Hide()=0;
|
virtual void Hide()=0;
|
||||||
|
|
||||||
|
virtual void ToMinWindow(){}
|
||||||
|
virtual void ToMaxWindow(){}
|
||||||
|
|
||||||
|
virtual void SetSystemCursor(bool){}
|
||||||
|
|
||||||
|
virtual bool MessageProc()=0;
|
||||||
};//class Window
|
};//class Window
|
||||||
|
|
||||||
Window *CreateRenderWindow(const OSString &win_name);
|
Window *CreateRenderWindow(const OSString &win_name);
|
||||||
}//namespace graph
|
|
||||||
|
void InitNativeWindowSystem();
|
||||||
}//namespace hgl
|
}//namespace hgl
|
||||||
#endif//HGL_GRAPH_WINDOW_INCLUDE
|
#endif//HGL_GRAPH_WINDOW_INCLUDE
|
||||||
|
@ -89,10 +89,14 @@ IF(WIN32)
|
|||||||
|
|
||||||
SET(PLATFORM_DESKTOP_SOURCE Win/Desktop.cpp)
|
SET(PLATFORM_DESKTOP_SOURCE Win/Desktop.cpp)
|
||||||
|
|
||||||
SET(PLATFORM_WINDOW_SOURCE Win/WinWindow.cpp)
|
SET(PLATFORM_WINDOW_SOURCE Win/WinWindow.h
|
||||||
SET(PLATFORM_INPUT_DEVICE_SOURCE Win/KeyConvert.cpp)
|
Win/WinWindow.cpp
|
||||||
|
Win/WinMessage.cpp
|
||||||
|
Win/WinVulkan.cpp)
|
||||||
ENDIF(WIN32)
|
ENDIF(WIN32)
|
||||||
|
|
||||||
|
SET(PLATFORM_WINDOW_SOURCE ${PLATFORM_WINDOW_SOURCE} Window.cpp)
|
||||||
|
|
||||||
SOURCE_GROUP("InputDevice" FILES ${PLATFORM_INPUT_DEVICE_SOURCE})
|
SOURCE_GROUP("InputDevice" FILES ${PLATFORM_INPUT_DEVICE_SOURCE})
|
||||||
SOURCE_GROUP("CodePage" FILES ${PLATFORM_CODEPAGE_SOURCE})
|
SOURCE_GROUP("CodePage" FILES ${PLATFORM_CODEPAGE_SOURCE})
|
||||||
SOURCE_GROUP("File" FILES ${PLATFORM_FILE_SOURCE})
|
SOURCE_GROUP("File" FILES ${PLATFORM_FILE_SOURCE})
|
||||||
|
@ -1,171 +0,0 @@
|
|||||||
#include<hgl/type/DataType.h>
|
|
||||||
#include<hgl/platform/InputDevice.h>
|
|
||||||
#include<Windows.h>
|
|
||||||
|
|
||||||
#ifdef _DEBUG
|
|
||||||
#include<hgl/LogInfo.h>
|
|
||||||
#endif//_DEBUG
|
|
||||||
|
|
||||||
namespace hgl
|
|
||||||
{
|
|
||||||
static KeyboardButton KeyConvert[256];
|
|
||||||
|
|
||||||
void InitKeyConvert()
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
memset(KeyConvert,0,sizeof(KeyConvert));
|
|
||||||
|
|
||||||
KeyConvert[VK_ESCAPE ]=kbEsc;
|
|
||||||
for(i=VK_F1;i<=VK_F12;i++)KeyConvert[i]=(KeyboardButton)(kbF1+i-VK_F1);
|
|
||||||
|
|
||||||
KeyConvert['`' ]=kbGrave;
|
|
||||||
for(i='0';i<='9';i++)KeyConvert[i]=(KeyboardButton)(kb0+i-'0');
|
|
||||||
KeyConvert['-' ]=kbMinus;
|
|
||||||
KeyConvert['=' ]=kbEquals;
|
|
||||||
KeyConvert['\\' ]=kbBackSlash;
|
|
||||||
KeyConvert[VK_BACK ]=kbBackSpace;
|
|
||||||
|
|
||||||
KeyConvert[VK_TAB ]=kbTab;
|
|
||||||
KeyConvert['Q' ]=kbQ;
|
|
||||||
KeyConvert['W' ]=kbW;
|
|
||||||
KeyConvert['E' ]=kbE;
|
|
||||||
KeyConvert['R' ]=kbR;
|
|
||||||
KeyConvert['T' ]=kbT;
|
|
||||||
KeyConvert['Y' ]=kbY;
|
|
||||||
KeyConvert['U' ]=kbU;
|
|
||||||
KeyConvert['I' ]=kbI;
|
|
||||||
KeyConvert['O' ]=kbO;
|
|
||||||
KeyConvert['P' ]=kbP;
|
|
||||||
KeyConvert['[' ]=kbLeftBracket;
|
|
||||||
KeyConvert[']' ]=kbRightBracket;
|
|
||||||
|
|
||||||
KeyConvert[VK_CAPITAL ]=kbCapsLock;
|
|
||||||
KeyConvert['A' ]=kbA;
|
|
||||||
KeyConvert['S' ]=kbS;
|
|
||||||
KeyConvert['D' ]=kbD;
|
|
||||||
KeyConvert['F' ]=kbF;
|
|
||||||
KeyConvert['G' ]=kbG;
|
|
||||||
KeyConvert['H' ]=kbH;
|
|
||||||
KeyConvert['J' ]=kbJ;
|
|
||||||
KeyConvert['K' ]=kbK;
|
|
||||||
KeyConvert['L' ]=kbL;
|
|
||||||
KeyConvert[';' ]=kbSemicolon;
|
|
||||||
KeyConvert['\'' ]=kbApostrophe;
|
|
||||||
KeyConvert[VK_RETURN ]=kbEnter;
|
|
||||||
|
|
||||||
KeyConvert[VK_LSHIFT ]=kbLeftShift;
|
|
||||||
KeyConvert['Z' ]=kbZ;
|
|
||||||
KeyConvert['X' ]=kbX;
|
|
||||||
KeyConvert['C' ]=kbC;
|
|
||||||
KeyConvert['V' ]=kbV;
|
|
||||||
KeyConvert['B' ]=kbB;
|
|
||||||
KeyConvert['N' ]=kbN;
|
|
||||||
KeyConvert['M' ]=kbM;
|
|
||||||
KeyConvert[',' ]=kbComma;
|
|
||||||
KeyConvert['.' ]=kbPeriod;
|
|
||||||
KeyConvert['/' ]=kbSlash;
|
|
||||||
KeyConvert[VK_RSHIFT ]=kbRightShift;
|
|
||||||
|
|
||||||
KeyConvert[VK_LCONTROL ]=kbLeftCtrl;
|
|
||||||
KeyConvert[VK_LWIN ]=kbLeftOS;
|
|
||||||
KeyConvert[VK_LMENU ]=kbLeftAlt;
|
|
||||||
KeyConvert[VK_SPACE ]=kbSpace;
|
|
||||||
KeyConvert[VK_RMENU ]=kbRightAlt;
|
|
||||||
KeyConvert[VK_RWIN ]=kbRightOS;
|
|
||||||
KeyConvert[VK_RCONTROL ]=kbRightCtrl;
|
|
||||||
|
|
||||||
KeyConvert[VK_PAUSE ]=kbPause;
|
|
||||||
// KeyConvert[VK_CLEAR ]=kbClear;
|
|
||||||
|
|
||||||
KeyConvert[VK_NUMPAD0 ]=kbNum0;
|
|
||||||
KeyConvert[VK_NUMPAD1 ]=kbNum1;
|
|
||||||
KeyConvert[VK_NUMPAD2 ]=kbNum2;
|
|
||||||
KeyConvert[VK_NUMPAD3 ]=kbNum3;
|
|
||||||
KeyConvert[VK_NUMPAD4 ]=kbNum4;
|
|
||||||
KeyConvert[VK_NUMPAD5 ]=kbNum5;
|
|
||||||
KeyConvert[VK_NUMPAD6 ]=kbNum6;
|
|
||||||
KeyConvert[VK_NUMPAD7 ]=kbNum7;
|
|
||||||
KeyConvert[VK_NUMPAD8 ]=kbNum8;
|
|
||||||
KeyConvert[VK_NUMPAD9 ]=kbNum9;
|
|
||||||
|
|
||||||
KeyConvert[VK_DECIMAL ]=kbNumDecimal;
|
|
||||||
KeyConvert[VK_DIVIDE ]=kbNumDivide;
|
|
||||||
KeyConvert[VK_MULTIPLY ]=kbNumMultiply;
|
|
||||||
KeyConvert[VK_SUBTRACT ]=kbNumSubtract;
|
|
||||||
KeyConvert[VK_ADD ]=kbNumAdd;
|
|
||||||
|
|
||||||
KeyConvert[VK_UP ]=kbUp;
|
|
||||||
KeyConvert[VK_DOWN ]=kbDown;
|
|
||||||
KeyConvert[VK_LEFT ]=kbLeft;
|
|
||||||
KeyConvert[VK_RIGHT ]=kbRight;
|
|
||||||
|
|
||||||
KeyConvert[VK_INSERT ]=kbInsert;
|
|
||||||
KeyConvert[VK_DELETE ]=kbDelete;
|
|
||||||
KeyConvert[VK_HOME ]=kbHome;
|
|
||||||
KeyConvert[VK_END ]=kbEnd;
|
|
||||||
KeyConvert[VK_PRIOR ]=kbPageUp;
|
|
||||||
KeyConvert[VK_NEXT ]=kbPageDown;
|
|
||||||
|
|
||||||
KeyConvert[VK_NUMLOCK ]=kbNumLock;
|
|
||||||
KeyConvert[VK_SCROLL ]=kbScrollLock;
|
|
||||||
|
|
||||||
//KeyConvert[VK_SHIFT ]=kbLeftShift;
|
|
||||||
//KeyConvert[VK_CONTROL ]=kbLeftCtrl;
|
|
||||||
//KeyConvert[VK_MENU ]=kbLeftAlt;
|
|
||||||
|
|
||||||
KeyConvert[VK_OEM_1 ]=kbSemicolon;
|
|
||||||
KeyConvert[VK_OEM_PLUS ]=kbEquals;
|
|
||||||
KeyConvert[VK_OEM_COMMA ]=kbComma;
|
|
||||||
KeyConvert[VK_OEM_MINUS ]=kbMinus;
|
|
||||||
KeyConvert[VK_OEM_PERIOD]=kbPeriod;
|
|
||||||
KeyConvert[VK_OEM_2 ]=kbSlash;
|
|
||||||
KeyConvert[VK_OEM_3 ]=kbGrave;
|
|
||||||
KeyConvert[VK_OEM_4 ]=kbLeftBracket;
|
|
||||||
KeyConvert[VK_OEM_5 ]=kbBackSlash;
|
|
||||||
KeyConvert[VK_OEM_6 ]=kbRightBracket;
|
|
||||||
KeyConvert[VK_OEM_7 ]=kbApostrophe;
|
|
||||||
}
|
|
||||||
|
|
||||||
KeyboardButton ConvertOSKey(uint key)
|
|
||||||
{
|
|
||||||
if(key<0||key>=256)return(kb_NONE);
|
|
||||||
|
|
||||||
if(key==VK_SHIFT)
|
|
||||||
{
|
|
||||||
if((GetAsyncKeyState(VK_LSHIFT)>>15)&1)
|
|
||||||
return kbLeftShift;
|
|
||||||
else
|
|
||||||
return kbRightShift;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if(key==VK_CONTROL)
|
|
||||||
{
|
|
||||||
if((GetAsyncKeyState(VK_LCONTROL)>>15)&1)
|
|
||||||
return kbLeftCtrl;
|
|
||||||
else
|
|
||||||
return kbRightCtrl;
|
|
||||||
}
|
|
||||||
if(key==VK_MENU)
|
|
||||||
{
|
|
||||||
if((GetAsyncKeyState(VK_LMENU)>>15)&1)
|
|
||||||
return kbLeftAlt;
|
|
||||||
else
|
|
||||||
return kbRightAlt;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef _DEBUG
|
|
||||||
if(KeyConvert[key]==0)
|
|
||||||
{
|
|
||||||
wchar_t name[64];
|
|
||||||
|
|
||||||
::GetKeyNameTextW(key,name,64);
|
|
||||||
|
|
||||||
LOG_INFO(WideString(L"Unknow Key: " )+WideString(key)
|
|
||||||
+WideString(L" ,name: " )+WideString(name));
|
|
||||||
}
|
|
||||||
#endif _DEBUG
|
|
||||||
|
|
||||||
return KeyConvert[key];
|
|
||||||
}
|
|
||||||
}//namespace hgl
|
|
315
src/Platform/Win/WinMessage.cpp
Normal file
315
src/Platform/Win/WinMessage.cpp
Normal file
@ -0,0 +1,315 @@
|
|||||||
|
#include"WinWindow.h"
|
||||||
|
#include<hgl/platform/InputDevice.h>
|
||||||
|
#include<Windows.h>
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
#include<hgl/LogInfo.h>
|
||||||
|
#endif//_DEBUG
|
||||||
|
|
||||||
|
namespace hgl
|
||||||
|
{
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
static KeyboardButton KeyConvert[256];
|
||||||
|
static void (*WMProc[2048])(WinWindow *,uint32,uint32); //消息处理队列
|
||||||
|
|
||||||
|
uint32 GetKeyFlags(uint32 wflags)
|
||||||
|
{
|
||||||
|
uint32 flag=0;
|
||||||
|
|
||||||
|
if(wflags&MK_LBUTTON)flag|=mbLeft;
|
||||||
|
if(wflags&MK_RBUTTON)flag|=mbRight;
|
||||||
|
if(wflags&MK_MBUTTON)flag|=mbMid;
|
||||||
|
|
||||||
|
if(wflags&MK_SHIFT )flag|=mbShift;
|
||||||
|
if(wflags&MK_CONTROL)flag|=mbCtrl;
|
||||||
|
|
||||||
|
return(flag);
|
||||||
|
}
|
||||||
|
|
||||||
|
void InitKeyConvert()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
memset(KeyConvert,0,sizeof(KeyConvert));
|
||||||
|
|
||||||
|
KeyConvert[VK_ESCAPE ]=kbEsc;
|
||||||
|
for(i=VK_F1;i<=VK_F12;i++)KeyConvert[i]=(KeyboardButton)(kbF1+i-VK_F1);
|
||||||
|
|
||||||
|
KeyConvert['`' ]=kbGrave;
|
||||||
|
for(i='0';i<='9';i++)KeyConvert[i]=(KeyboardButton)(kb0+i-'0');
|
||||||
|
KeyConvert['-' ]=kbMinus;
|
||||||
|
KeyConvert['=' ]=kbEquals;
|
||||||
|
KeyConvert['\\' ]=kbBackSlash;
|
||||||
|
KeyConvert[VK_BACK ]=kbBackSpace;
|
||||||
|
|
||||||
|
KeyConvert[VK_TAB ]=kbTab;
|
||||||
|
KeyConvert['Q' ]=kbQ;
|
||||||
|
KeyConvert['W' ]=kbW;
|
||||||
|
KeyConvert['E' ]=kbE;
|
||||||
|
KeyConvert['R' ]=kbR;
|
||||||
|
KeyConvert['T' ]=kbT;
|
||||||
|
KeyConvert['Y' ]=kbY;
|
||||||
|
KeyConvert['U' ]=kbU;
|
||||||
|
KeyConvert['I' ]=kbI;
|
||||||
|
KeyConvert['O' ]=kbO;
|
||||||
|
KeyConvert['P' ]=kbP;
|
||||||
|
KeyConvert['[' ]=kbLeftBracket;
|
||||||
|
KeyConvert[']' ]=kbRightBracket;
|
||||||
|
|
||||||
|
KeyConvert[VK_CAPITAL ]=kbCapsLock;
|
||||||
|
KeyConvert['A' ]=kbA;
|
||||||
|
KeyConvert['S' ]=kbS;
|
||||||
|
KeyConvert['D' ]=kbD;
|
||||||
|
KeyConvert['F' ]=kbF;
|
||||||
|
KeyConvert['G' ]=kbG;
|
||||||
|
KeyConvert['H' ]=kbH;
|
||||||
|
KeyConvert['J' ]=kbJ;
|
||||||
|
KeyConvert['K' ]=kbK;
|
||||||
|
KeyConvert['L' ]=kbL;
|
||||||
|
KeyConvert[';' ]=kbSemicolon;
|
||||||
|
KeyConvert['\'' ]=kbApostrophe;
|
||||||
|
KeyConvert[VK_RETURN ]=kbEnter;
|
||||||
|
|
||||||
|
KeyConvert[VK_LSHIFT ]=kbLeftShift;
|
||||||
|
KeyConvert['Z' ]=kbZ;
|
||||||
|
KeyConvert['X' ]=kbX;
|
||||||
|
KeyConvert['C' ]=kbC;
|
||||||
|
KeyConvert['V' ]=kbV;
|
||||||
|
KeyConvert['B' ]=kbB;
|
||||||
|
KeyConvert['N' ]=kbN;
|
||||||
|
KeyConvert['M' ]=kbM;
|
||||||
|
KeyConvert[',' ]=kbComma;
|
||||||
|
KeyConvert['.' ]=kbPeriod;
|
||||||
|
KeyConvert['/' ]=kbSlash;
|
||||||
|
KeyConvert[VK_RSHIFT ]=kbRightShift;
|
||||||
|
|
||||||
|
KeyConvert[VK_LCONTROL ]=kbLeftCtrl;
|
||||||
|
KeyConvert[VK_LWIN ]=kbLeftOS;
|
||||||
|
KeyConvert[VK_LMENU ]=kbLeftAlt;
|
||||||
|
KeyConvert[VK_SPACE ]=kbSpace;
|
||||||
|
KeyConvert[VK_RMENU ]=kbRightAlt;
|
||||||
|
KeyConvert[VK_RWIN ]=kbRightOS;
|
||||||
|
KeyConvert[VK_RCONTROL ]=kbRightCtrl;
|
||||||
|
|
||||||
|
KeyConvert[VK_PAUSE ]=kbPause;
|
||||||
|
// KeyConvert[VK_CLEAR ]=kbClear;
|
||||||
|
|
||||||
|
KeyConvert[VK_NUMPAD0 ]=kbNum0;
|
||||||
|
KeyConvert[VK_NUMPAD1 ]=kbNum1;
|
||||||
|
KeyConvert[VK_NUMPAD2 ]=kbNum2;
|
||||||
|
KeyConvert[VK_NUMPAD3 ]=kbNum3;
|
||||||
|
KeyConvert[VK_NUMPAD4 ]=kbNum4;
|
||||||
|
KeyConvert[VK_NUMPAD5 ]=kbNum5;
|
||||||
|
KeyConvert[VK_NUMPAD6 ]=kbNum6;
|
||||||
|
KeyConvert[VK_NUMPAD7 ]=kbNum7;
|
||||||
|
KeyConvert[VK_NUMPAD8 ]=kbNum8;
|
||||||
|
KeyConvert[VK_NUMPAD9 ]=kbNum9;
|
||||||
|
|
||||||
|
KeyConvert[VK_DECIMAL ]=kbNumDecimal;
|
||||||
|
KeyConvert[VK_DIVIDE ]=kbNumDivide;
|
||||||
|
KeyConvert[VK_MULTIPLY ]=kbNumMultiply;
|
||||||
|
KeyConvert[VK_SUBTRACT ]=kbNumSubtract;
|
||||||
|
KeyConvert[VK_ADD ]=kbNumAdd;
|
||||||
|
|
||||||
|
KeyConvert[VK_UP ]=kbUp;
|
||||||
|
KeyConvert[VK_DOWN ]=kbDown;
|
||||||
|
KeyConvert[VK_LEFT ]=kbLeft;
|
||||||
|
KeyConvert[VK_RIGHT ]=kbRight;
|
||||||
|
|
||||||
|
KeyConvert[VK_INSERT ]=kbInsert;
|
||||||
|
KeyConvert[VK_DELETE ]=kbDelete;
|
||||||
|
KeyConvert[VK_HOME ]=kbHome;
|
||||||
|
KeyConvert[VK_END ]=kbEnd;
|
||||||
|
KeyConvert[VK_PRIOR ]=kbPageUp;
|
||||||
|
KeyConvert[VK_NEXT ]=kbPageDown;
|
||||||
|
|
||||||
|
KeyConvert[VK_NUMLOCK ]=kbNumLock;
|
||||||
|
KeyConvert[VK_SCROLL ]=kbScrollLock;
|
||||||
|
|
||||||
|
//KeyConvert[VK_SHIFT ]=kbLeftShift;
|
||||||
|
//KeyConvert[VK_CONTROL ]=kbLeftCtrl;
|
||||||
|
//KeyConvert[VK_MENU ]=kbLeftAlt;
|
||||||
|
|
||||||
|
KeyConvert[VK_OEM_1 ]=kbSemicolon;
|
||||||
|
KeyConvert[VK_OEM_PLUS ]=kbEquals;
|
||||||
|
KeyConvert[VK_OEM_COMMA ]=kbComma;
|
||||||
|
KeyConvert[VK_OEM_MINUS ]=kbMinus;
|
||||||
|
KeyConvert[VK_OEM_PERIOD]=kbPeriod;
|
||||||
|
KeyConvert[VK_OEM_2 ]=kbSlash;
|
||||||
|
KeyConvert[VK_OEM_3 ]=kbGrave;
|
||||||
|
KeyConvert[VK_OEM_4 ]=kbLeftBracket;
|
||||||
|
KeyConvert[VK_OEM_5 ]=kbBackSlash;
|
||||||
|
KeyConvert[VK_OEM_6 ]=kbRightBracket;
|
||||||
|
KeyConvert[VK_OEM_7 ]=kbApostrophe;
|
||||||
|
}
|
||||||
|
|
||||||
|
KeyboardButton ConvertOSKey(uint key)
|
||||||
|
{
|
||||||
|
if(key<kbBeginRange||key>=kbEndRange)return(kbBeginRange);
|
||||||
|
|
||||||
|
if(key==VK_SHIFT)
|
||||||
|
{
|
||||||
|
if((GetAsyncKeyState(VK_LSHIFT)>>15)&1)
|
||||||
|
return kbLeftShift;
|
||||||
|
else
|
||||||
|
return kbRightShift;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if(key==VK_CONTROL)
|
||||||
|
{
|
||||||
|
if((GetAsyncKeyState(VK_LCONTROL)>>15)&1)
|
||||||
|
return kbLeftCtrl;
|
||||||
|
else
|
||||||
|
return kbRightCtrl;
|
||||||
|
}
|
||||||
|
if(key==VK_MENU)
|
||||||
|
{
|
||||||
|
if((GetAsyncKeyState(VK_LMENU)>>15)&1)
|
||||||
|
return kbLeftAlt;
|
||||||
|
else
|
||||||
|
return kbRightAlt;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
if(KeyConvert[key]==0)
|
||||||
|
{
|
||||||
|
wchar_t name[64];
|
||||||
|
|
||||||
|
::GetKeyNameTextW(key,name,64);
|
||||||
|
|
||||||
|
LOG_INFO(WideString(L"Unknow Key: " )+WideString(key)
|
||||||
|
+WideString(L" ,name: " )+WideString(name));
|
||||||
|
}
|
||||||
|
#endif _DEBUG
|
||||||
|
|
||||||
|
return KeyConvert[key];
|
||||||
|
}
|
||||||
|
|
||||||
|
void WMProcDestroy(WinWindow *,uint32,uint32)
|
||||||
|
{
|
||||||
|
PostQuitMessage(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define WMEF_MOUSE(button,action) void WMProcMouse##button##action(WinWindow *win,uint32 wParam,uint32 lParam) \
|
||||||
|
{ \
|
||||||
|
const int x=LOWORD(lParam); \
|
||||||
|
const int y=HIWORD(lParam); \
|
||||||
|
\
|
||||||
|
win->OnMouseMove(x,y); \
|
||||||
|
win->OnMouse##action(x,y,mb##button|GetKeyFlags(wParam)); \
|
||||||
|
}
|
||||||
|
|
||||||
|
WMEF_MOUSE(Left,Down);
|
||||||
|
WMEF_MOUSE(Left,Up);
|
||||||
|
WMEF_MOUSE(Left,DoubleClick);
|
||||||
|
|
||||||
|
WMEF_MOUSE(Mid,Down);
|
||||||
|
WMEF_MOUSE(Mid,Up);
|
||||||
|
WMEF_MOUSE(Mid,DoubleClick);
|
||||||
|
|
||||||
|
WMEF_MOUSE(Right,Down);
|
||||||
|
WMEF_MOUSE(Right,Up);
|
||||||
|
WMEF_MOUSE(Right,DoubleClick);
|
||||||
|
|
||||||
|
void WMProcMouseMove(WinWindow *win,uint32 wParam,uint32 lParam)
|
||||||
|
{
|
||||||
|
win->OnMouseMove(LOWORD(lParam),HIWORD(lParam));
|
||||||
|
}
|
||||||
|
#undef WMEF_MOUSE
|
||||||
|
|
||||||
|
#define WMEF2(name) void name(WinWindow *win,uint32 wParam,uint32 lParam)
|
||||||
|
WMEF2(WMProcMouseWheel)
|
||||||
|
{
|
||||||
|
const int x=LOWORD(lParam);
|
||||||
|
const int y=HIWORD(lParam);
|
||||||
|
|
||||||
|
win->OnMouseMove(x,y);
|
||||||
|
win->OnMouseWheel(x,y,(short)HIWORD(wParam));
|
||||||
|
}
|
||||||
|
|
||||||
|
WMEF2(WMProcSize)
|
||||||
|
{
|
||||||
|
win->OnResize(LOWORD(lParam),HIWORD(lParam));
|
||||||
|
}
|
||||||
|
#undef WMEF2
|
||||||
|
|
||||||
|
#define WMEF1(name) void name(WinWindow *win,uint32 wParam,uint32)
|
||||||
|
WMEF1(WMProcKeyDown)
|
||||||
|
{
|
||||||
|
win->OnKeyDown(ConvertOSKey(wParam));
|
||||||
|
}
|
||||||
|
|
||||||
|
WMEF1(WMProcKeyUp)
|
||||||
|
{
|
||||||
|
win->OnKeyUp(ConvertOSKey(wParam));
|
||||||
|
}
|
||||||
|
|
||||||
|
WMEF1(WMProcChar)
|
||||||
|
{
|
||||||
|
win->OnChar((wchar_t)wParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
WMEF1(WMProcActive)
|
||||||
|
{
|
||||||
|
//if(JoyPlugIn)
|
||||||
|
// JoyInterface.SetInputActive(wParam);
|
||||||
|
|
||||||
|
win->OnActive(wParam);
|
||||||
|
}
|
||||||
|
#undef WMEF1
|
||||||
|
}//namespace
|
||||||
|
|
||||||
|
void InitMessageProc()
|
||||||
|
{
|
||||||
|
memset(WMProc,0,sizeof(WMProc));
|
||||||
|
InitKeyConvert();
|
||||||
|
|
||||||
|
//if(joy)
|
||||||
|
// LoadJoystick(win->hInstance,win->hWnd);
|
||||||
|
|
||||||
|
#define WM_MAP(wm,func) WMProc[wm]=func;
|
||||||
|
|
||||||
|
WM_MAP(WM_CLOSE ,WMProcDestroy);
|
||||||
|
WM_MAP(WM_LBUTTONDOWN ,WMProcMouseLeftDown);
|
||||||
|
WM_MAP(WM_LBUTTONUP ,WMProcMouseLeftUp);
|
||||||
|
WM_MAP(WM_LBUTTONDBLCLK ,WMProcMouseLeftDoubleClick);
|
||||||
|
WM_MAP(WM_MBUTTONDOWN ,WMProcMouseMidDown);
|
||||||
|
WM_MAP(WM_MBUTTONUP ,WMProcMouseMidUp);
|
||||||
|
WM_MAP(WM_MBUTTONDBLCLK ,WMProcMouseMidDoubleClick);
|
||||||
|
WM_MAP(WM_RBUTTONDOWN ,WMProcMouseRightDown);
|
||||||
|
WM_MAP(WM_RBUTTONUP ,WMProcMouseRightUp);
|
||||||
|
WM_MAP(WM_RBUTTONDBLCLK ,WMProcMouseRightDoubleClick);
|
||||||
|
WM_MAP(WM_MOUSEWHEEL ,WMProcMouseWheel);
|
||||||
|
WM_MAP(WM_MOUSEMOVE ,WMProcMouseMove);
|
||||||
|
WM_MAP(WM_KEYDOWN ,WMProcKeyDown);
|
||||||
|
WM_MAP(WM_KEYUP ,WMProcKeyUp);
|
||||||
|
WM_MAP(WM_SYSKEYDOWN ,WMProcKeyDown);
|
||||||
|
WM_MAP(WM_SYSKEYUP ,WMProcKeyUp);
|
||||||
|
WM_MAP(WM_CHAR ,WMProcChar);
|
||||||
|
WM_MAP(WM_SYSCHAR ,WMProcChar);
|
||||||
|
WM_MAP(WM_ACTIVATE ,WMProcActive);
|
||||||
|
WM_MAP(WM_SIZE ,WMProcSize);
|
||||||
|
|
||||||
|
#undef WM_MAP
|
||||||
|
}
|
||||||
|
|
||||||
|
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
if(uMsg<2048)
|
||||||
|
if(WMProc[uMsg])
|
||||||
|
{
|
||||||
|
WinWindow *win=(WinWindow *)GetWindowLongPtrW(hWnd,GWLP_USERDATA);
|
||||||
|
|
||||||
|
if(win)
|
||||||
|
WMProc[uMsg](win,wParam,lParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (DefWindowProcW(hWnd, uMsg, wParam, lParam));
|
||||||
|
}
|
||||||
|
|
||||||
|
void InitNativeWindowSystem()
|
||||||
|
{
|
||||||
|
InitMessageProc();
|
||||||
|
}
|
||||||
|
}//namespace hgl
|
25
src/Platform/Win/WinVulkan.cpp
Normal file
25
src/Platform/Win/WinVulkan.cpp
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#include"WinWindow.h"
|
||||||
|
#include<hgl/graph/vulkan/VK.h>
|
||||||
|
#include<vulkan/vulkan_win32.h>
|
||||||
|
|
||||||
|
VK_NAMESPACE_BEGIN
|
||||||
|
VkSurfaceKHR CreateRenderDevice(VkInstance vk_inst,Window *win)
|
||||||
|
{
|
||||||
|
WinWindow *ww=(WinWindow *)win;
|
||||||
|
|
||||||
|
VkWin32SurfaceCreateInfoKHR createInfo={};
|
||||||
|
createInfo.sType=VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR;
|
||||||
|
createInfo.pNext=nullptr;
|
||||||
|
createInfo.hinstance=ww->GetHInstance();
|
||||||
|
createInfo.hwnd=ww->GetHWnd();
|
||||||
|
|
||||||
|
VkSurfaceKHR surface;
|
||||||
|
|
||||||
|
VkResult res=vkCreateWin32SurfaceKHR(vk_inst,&createInfo,nullptr,&surface);
|
||||||
|
|
||||||
|
if(res!=VK_SUCCESS)
|
||||||
|
return(nullptr);
|
||||||
|
|
||||||
|
return(surface);
|
||||||
|
}
|
||||||
|
VK_NAMESPACE_END
|
@ -1,47 +1,15 @@
|
|||||||
#include<hgl/platform/Window.h>
|
#include"WinWindow.h"
|
||||||
#include<hgl/graph/vulkan/VK.h>
|
|
||||||
#include<Windows.h>
|
|
||||||
#include<vulkan/vulkan_win32.h>
|
|
||||||
|
|
||||||
namespace hgl
|
namespace hgl
|
||||||
{
|
{
|
||||||
namespace graph
|
|
||||||
{
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
constexpr wchar_t WIN_CLASS_NAME[] = L"CMGameEngine/ULRE Window Class";
|
constexpr wchar_t WIN_CLASS_NAME[] = L"CMGameEngine/ULRE Window Class";
|
||||||
|
|
||||||
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
||||||
{
|
|
||||||
Window *win=(Window *)GetWindowLongPtrW(hWnd, GWLP_USERDATA);
|
|
||||||
|
|
||||||
switch (uMsg)
|
|
||||||
{
|
|
||||||
case WM_CLOSE:
|
|
||||||
PostQuitMessage(0);
|
|
||||||
break;
|
|
||||||
case WM_PAINT:
|
|
||||||
return 0;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return (DefWindowProcW(hWnd, uMsg, wParam, lParam));
|
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
bool WinWindow::Registry()
|
||||||
* Windows平台窗口实现
|
|
||||||
*/
|
|
||||||
class WinWindow :public Window
|
|
||||||
{
|
|
||||||
HINSTANCE hInstance = nullptr;
|
|
||||||
HWND win_hwnd=nullptr;
|
|
||||||
HDC win_dc = nullptr;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
bool Registry()
|
|
||||||
{
|
{
|
||||||
WNDCLASSEXW win_class;
|
WNDCLASSEXW win_class;
|
||||||
|
|
||||||
@ -49,7 +17,7 @@ namespace hgl
|
|||||||
|
|
||||||
win_class.cbSize = sizeof(WNDCLASSEXW);
|
win_class.cbSize = sizeof(WNDCLASSEXW);
|
||||||
win_class.style = CS_HREDRAW | CS_VREDRAW;
|
win_class.style = CS_HREDRAW | CS_VREDRAW;
|
||||||
win_class.lpfnWndProc = WndProc;
|
win_class.lpfnWndProc = WindowProc;
|
||||||
win_class.cbClsExtra = 0;
|
win_class.cbClsExtra = 0;
|
||||||
win_class.cbWndExtra = 0;
|
win_class.cbWndExtra = 0;
|
||||||
win_class.hInstance = hInstance;
|
win_class.hInstance = hInstance;
|
||||||
@ -63,7 +31,7 @@ namespace hgl
|
|||||||
return RegisterClassExW(&win_class);
|
return RegisterClassExW(&win_class);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Create()
|
bool WinWindow::Create()
|
||||||
{
|
{
|
||||||
constexpr DWORD win_style = WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_SYSMENU ;
|
constexpr DWORD win_style = WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_SYSMENU ;
|
||||||
|
|
||||||
@ -118,16 +86,14 @@ namespace hgl
|
|||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
WinWindow::~WinWindow()
|
||||||
|
|
||||||
using Window::Window;
|
|
||||||
~WinWindow()
|
|
||||||
{
|
{
|
||||||
Close();
|
Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Create(uint w, uint h) override
|
bool WinWindow::Create(uint w, uint h)
|
||||||
{
|
{
|
||||||
|
full_screen=false;
|
||||||
width = w;
|
width = w;
|
||||||
height = h;
|
height = h;
|
||||||
|
|
||||||
@ -136,15 +102,25 @@ namespace hgl
|
|||||||
if (!Registry())
|
if (!Registry())
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
return Create();
|
if(!Create())
|
||||||
|
{
|
||||||
|
is_close=true;
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
is_close=false;
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Create(uint, uint, uint)override
|
bool WinWindow::Create(uint, uint, uint)
|
||||||
{
|
{
|
||||||
|
full_screen=true;
|
||||||
return(false);
|
return(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Close()override
|
void WinWindow::Close()
|
||||||
{
|
{
|
||||||
ReleaseDC(win_hwnd, win_dc);
|
ReleaseDC(win_hwnd, win_dc);
|
||||||
DestroyWindow(win_hwnd);
|
DestroyWindow(win_hwnd);
|
||||||
@ -152,9 +128,16 @@ namespace hgl
|
|||||||
|
|
||||||
win_dc = nullptr;
|
win_dc = nullptr;
|
||||||
win_hwnd = nullptr;
|
win_hwnd = nullptr;
|
||||||
|
is_close = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Show()override
|
void WinWindow::SetCaption(const OSString &caption)
|
||||||
|
{
|
||||||
|
win_name=caption;
|
||||||
|
SetWindowTextW(win_hwnd,caption.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
void WinWindow::Show()
|
||||||
{
|
{
|
||||||
ShowWindow(win_hwnd, SW_SHOW);
|
ShowWindow(win_hwnd, SW_SHOW);
|
||||||
SetForegroundWindow(win_hwnd);
|
SetForegroundWindow(win_hwnd);
|
||||||
@ -163,41 +146,54 @@ namespace hgl
|
|||||||
UpdateWindow(win_hwnd);
|
UpdateWindow(win_hwnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Hide()override
|
void WinWindow::Hide()
|
||||||
{
|
{
|
||||||
ShowWindow(win_hwnd, SW_HIDE);
|
ShowWindow(win_hwnd, SW_HIDE);
|
||||||
UpdateWindow(win_hwnd);
|
UpdateWindow(win_hwnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
HINSTANCE GetHInstance(){return hInstance;}
|
void WinWindow::ToMinWindow()
|
||||||
HWND GetHWnd(){return win_hwnd;}
|
{
|
||||||
};//class WinWindow :public Window
|
if(!full_screen)
|
||||||
|
ShowWindow(win_hwnd,SW_MINIMIZE);
|
||||||
|
}
|
||||||
|
|
||||||
Window* CreateRenderWindow(const WideString& win_name)
|
void WinWindow::ToMaxWindow()
|
||||||
|
{
|
||||||
|
if(!full_screen)
|
||||||
|
ShowWindow(win_hwnd,SW_MAXIMIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void WinWindow::SetSystemCursor(bool visible)
|
||||||
|
{
|
||||||
|
::ShowCursor(visible);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool WinWindow::MessageProc()
|
||||||
|
{
|
||||||
|
if(PeekMessage(&win_msg,NULL,0,0,PM_REMOVE))
|
||||||
|
{
|
||||||
|
TranslateMessage(&win_msg);
|
||||||
|
DispatchMessage(&win_msg);
|
||||||
|
|
||||||
|
if(win_msg.message==WM_QUIT)
|
||||||
|
OnClose();
|
||||||
|
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//if(JoyPlugIn)
|
||||||
|
//{
|
||||||
|
// JoyInterface.Update();
|
||||||
|
//}
|
||||||
|
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Window *CreateRenderWindow(const WideString& win_name)
|
||||||
{
|
{
|
||||||
return(new WinWindow(win_name));
|
return(new WinWindow(win_name));
|
||||||
}
|
}
|
||||||
}//namespace graph
|
|
||||||
}//namespace hgl
|
}//namespace hgl
|
||||||
|
|
||||||
VK_NAMESPACE_BEGIN
|
|
||||||
VkSurfaceKHR CreateRenderDevice(VkInstance vk_inst,Window *win)
|
|
||||||
{
|
|
||||||
WinWindow *ww=(WinWindow *)win;
|
|
||||||
|
|
||||||
VkWin32SurfaceCreateInfoKHR createInfo={};
|
|
||||||
createInfo.sType=VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR;
|
|
||||||
createInfo.pNext=nullptr;
|
|
||||||
createInfo.hinstance=ww->GetHInstance();
|
|
||||||
createInfo.hwnd=ww->GetHWnd();
|
|
||||||
|
|
||||||
VkSurfaceKHR surface;
|
|
||||||
|
|
||||||
VkResult res=vkCreateWin32SurfaceKHR(vk_inst,&createInfo,nullptr,&surface);
|
|
||||||
|
|
||||||
if(res!=VK_SUCCESS)
|
|
||||||
return(nullptr);
|
|
||||||
|
|
||||||
return(surface);
|
|
||||||
}
|
|
||||||
VK_NAMESPACE_END
|
|
51
src/Platform/Win/WinWindow.h
Normal file
51
src/Platform/Win/WinWindow.h
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
#pragma once
|
||||||
|
#include<hgl/platform/Window.h>
|
||||||
|
#include<Windows.h>
|
||||||
|
|
||||||
|
namespace hgl
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Windows平台窗口实现
|
||||||
|
*/
|
||||||
|
class WinWindow:public Window
|
||||||
|
{
|
||||||
|
HINSTANCE hInstance = nullptr;
|
||||||
|
HWND win_hwnd = nullptr;
|
||||||
|
HDC win_dc = nullptr;
|
||||||
|
|
||||||
|
MSG win_msg;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
bool Registry();
|
||||||
|
bool Create();
|
||||||
|
|
||||||
|
void OnClose() override{Close();}
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
using Window::Window;
|
||||||
|
~WinWindow();
|
||||||
|
|
||||||
|
HINSTANCE GetHInstance(){return hInstance;}
|
||||||
|
HWND GetHWnd(){return win_hwnd;}
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
bool Create(uint w, uint h) override;
|
||||||
|
bool Create(uint, uint, uint) override;
|
||||||
|
void Close() override;
|
||||||
|
|
||||||
|
void SetCaption(const OSString &caption) override;
|
||||||
|
|
||||||
|
void Show() override;
|
||||||
|
void Hide() override;
|
||||||
|
|
||||||
|
void ToMinWindow() override;
|
||||||
|
void ToMaxWindow() override;
|
||||||
|
|
||||||
|
void SetSystemCursor(bool visible) override;
|
||||||
|
|
||||||
|
bool MessageProc() override;
|
||||||
|
};//class WinWindow :public Window
|
||||||
|
}//namespace win
|
Loading…
x
Reference in New Issue
Block a user