?? fg_win32adaptor.cpp
字號:
/*--------------------------------------------------------------------------
FG_Win32Adaptor.cpp - Win32的適配器類的實現文件
本程序是FishGUI軟件的一部分
版權所有 (C) 2003,2004 王詠武
http://www.contextfree.net/wangyw/
----------------------------------------------------------------------------
作者對 FishGUI 軟件及其所有源代碼授權如下:
允許任何個人、組織、機構、企業無償獲得、修改、使用、重新發布 FishGUI 軟
件及其源代碼,或按照有償或者無償的方式發行基于 FishGUI 源代碼的全部或部
分內容開發的軟件產品,——但行使以上權利時,須遵守以下約定:
1、重新發布 FishGUI 軟件及其源代碼時,不得隱去軟件及其源代碼中原有的版
權信息和開發者標識。
2、發行基于 FishGUI 源代碼的全部或部分內容開發的軟件產品時,必須在產品
的顯著位置標明以下字樣:
【本產品的一部分功能是基于王詠武在 FishGUI 軟件中的工作完成的】
3、在正式出版物中引用 FishGUI 的文檔、源代碼或注釋內容的,應注明軟件的
原作者為王詠武。
--------------------------------------------------------------------------*/
/*! \addtogroup OSAdaptor
* @{
*/
/*! \file
* \brief Win32的適配器類的實現文件
*/
/*! @} */
#include <stdio.h>
#include "windows.h"
#include "../Utility/FG_Utility.h"
#include "FG_Win32Adaptor.h"
#include "FG_WIn32DrawInterface.h"
#if defined(WIN32) && defined(_DEBUG)
/* Trace memory allocation in windows debug version */
#include <crtdbg.h>
static char THIS_FILE[] = __FILE__;
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
#endif /* _DEBUG */
//##ModelId=3F4E099D01F1
bool FG_Win32Adaptor::InitInstance()
{
if (! m_pDraw)
m_pDraw = new FG_Win32DrawInterface();
char szAppName[] = "FishGUI Win32 Simulator";
WNDCLASS wndClass;
if (! m_hPrevInst)
{
wndClass.style = CS_HREDRAW|CS_VREDRAW;
wndClass.lpfnWndProc = FG_Win32Adaptor::WndProc;
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = 0;
wndClass.hInstance = m_hInst;
wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wndClass.lpszMenuName = NULL;
wndClass.lpszClassName = szAppName;
RegisterClass(&wndClass);
}
HWND hWnd;
hWnd = CreateWindow(szAppName, szAppName,
WS_VISIBLE | WS_MINIMIZEBOX | WS_SYSMENU,
0, 0, SCREEN_WIDTH + 10, SCREEN_HEIGHT + 30,
NULL, NULL, m_hInst, NULL);
FG_Message Msg(FG_MSG_STARTUP);
SendMsg(& Msg);
// create timer tick for stimulating EMGUI
SetTimer(hWnd, 1, 50, NULL);
ShowWindow(hWnd, m_nCmdShow);
UpdateWindow(hWnd);
return true;
}
//##ModelId=3F4E09F802BB
bool FG_Win32Adaptor::ExitInstance()
{
FG_Message Msg(FG_MSG_HALT);
SendMsg(& Msg);
if (m_pDraw)
delete m_pDraw;
if (m_pAdaptor)
delete m_pAdaptor;
return true;
}
//##ModelId=3F4E09F8031F
bool FG_Win32Adaptor::Execute()
{
MSG msg;
while (GetMessage(& msg, 0, 0, 0))
{
TranslateMessage(& msg);
DispatchMessage(& msg);
}
return true;
}
//##ModelId=40925CB0009F
void FG_Win32Adaptor::SetBmpPath(char * pPath, int len)
{
memcpy(m_BmpPath, pPath, len);
m_BmpPath[len] = 0;
strcat(m_BmpPath, "\\Win32_Bmp");
}
//##ModelId=40925CB000E5
void FG_Win32Adaptor::DrawBitmap(const char * pBmpName, const short x1, const short y1)
{
char name[MAX_PATH + 1];
sprintf(name, "%s/%s.bmp", m_BmpPath, pBmpName);
m_pDraw->DrawBitmap(name, x1, y1);
}
//##ModelId=3F6EAFFE0335
long FAR WINAPI FG_Win32Adaptor::WndProc(HWND hWnd, UINT uMessage, UINT wParam, LONG lParam)
{
switch (uMessage)
{
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hDC = BeginPaint(hWnd, &ps);
((FG_Win32DrawInterface *)m_pDraw)->SetHDC(hDC);
FG_Message Msg(FG_MSG_DRAW);
m_pAdaptor->SendMsg(& Msg);
EndPaint(hWnd, &ps);
}
break;
case WM_KEYDOWN:
{
HDC hDC = GetDC(hWnd);
((FG_Win32DrawInterface *)m_pDraw)->SetHDC(hDC);
FG_Message Msg(FG_MSG_KEY, FKS_DOWN);
if ((wParam >= '0' && wParam <= '9')
|| (wParam >= 'A' && wParam <= 'Z')
|| (wParam >= 'a' && wParam <= 'z'))
Msg.lData = wParam;
else if (wParam == VK_RETURN)
Msg.lData = FVK_ENTER;
else if (wParam == VK_LEFT)
Msg.lData = FVK_LEFT;
else if (wParam == VK_RIGHT)
Msg.lData = FVK_RIGHT;
else if (wParam == VK_DELETE)
Msg.lData = FVK_DELETE;
else if (wParam == VK_TAB)
Msg.lData = FVK_TAB;
m_pAdaptor->SendMsg(& Msg);
ReleaseDC(hWnd, hDC);
}
break;
case WM_KEYUP:
{
HDC hDC = GetDC(hWnd);
((FG_Win32DrawInterface *)m_pDraw)->SetHDC(hDC);
FG_Message Msg(FG_MSG_KEY, FKS_UP);
if ((wParam >= '0' && wParam <= '9')
|| (wParam >= 'A' && wParam <= 'Z')
|| (wParam >= 'a' && wParam <= 'z'))
Msg.lData = wParam;
else if (wParam == VK_RETURN)
Msg.lData = FVK_ENTER;
else if (wParam == VK_LEFT)
Msg.lData = FVK_LEFT;
else if (wParam == VK_RIGHT)
Msg.lData = FVK_RIGHT;
else if (wParam == VK_DELETE)
Msg.lData = FVK_DELETE;
else if (wParam == VK_TAB)
Msg.lData = FVK_TAB;
m_pAdaptor->SendMsg(& Msg);
ReleaseDC(hWnd, hDC);
}
break;
case WM_LBUTTONDOWN:
{
HDC hDC = GetDC(hWnd);
((FG_Win32DrawInterface *)m_pDraw)->SetHDC(hDC);
FG_Message Msg(FG_MSG_MOUSE, FMS_LBUTTONDOWN);
Msg.Point.x = (WORD)lParam;
Msg.Point.y = (WORD)((lParam & 0xffff0000) >> 16);
m_pAdaptor->SendMsg(& Msg);
ReleaseDC(hWnd, hDC);
}
break;
case WM_LBUTTONUP:
{
HDC hDC = GetDC(hWnd);
((FG_Win32DrawInterface *)m_pDraw)->SetHDC(hDC);
FG_Message Msg(FG_MSG_MOUSE, FMS_LBUTTONUP);
Msg.Point.x = (WORD)lParam;
Msg.Point.y = (WORD)((lParam & 0xffff0000) >> 16);
m_pAdaptor->SendMsg(& Msg);
ReleaseDC(hWnd, hDC);
}
break;
case WM_TIMER:
{
HDC hDC = GetDC(hWnd);
((FG_Win32DrawInterface *)m_pDraw)->SetHDC(hDC);
FG_Message Msg(FG_MSG_TIMER);
m_pAdaptor->SendMsg(& Msg);
ReleaseDC(hWnd, hDC);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, uMessage, wParam, lParam);
}
return 0L;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -