📄 emwin.c
字号:
}while(0);
}
else{
}
LCDSIM_CheckMouseState();
//if(ghThread == 0) PostQuitMessage(0);
break;
/* 2005-6-8 23:32:58
#define WM_MOUSEFIRST 0x0200
#define WM_MOUSEMOVE 0x0200
#define WM_LBUTTONDOWN 0x0201
#define WM_LBUTTONUP 0x0202
cmp eax, 1FFh //此处处理所有三种MOUSE消息, 在反编译中容易看漏的, 如下所示...
jbe loc_55D4 //小于等于0x1ff跳往DefWindowProc处理...
cmp eax, 202h //msg小于0x202则转往处理MOUSE消息...
jbe short loc_557E */
case WM_MOUSEMOVE:
case WM_LBUTTONDOWN:
case WM_LBUTTONUP:
xPos = LOWORD(lParam);
yPos = HIWORD(lParam);
//此处判断MOUSE坐标时,一定注意所取的MOUSE坐标范围要翻倍...
SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
if(xPos >= 0 && yPos >=0 && xPos <= LCD_GetDevCap(LCD_DEVCAP_XSIZE)*LCD_GetXMag() && yPos <= LCD_GetDevCap(LCD_DEVCAP_YSIZE)*LCD_GetYMag()){
LCDSIM_SetMouseState(xPos, yPos, wParam);
}else{
LCDSIM_SetMouseState(-1, -1, 0);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
if(ps.fErase != 0){
rt.left = 0;
rt.top = 0;
rt.right = 0xfff;
rt.bottom = 0xfff;
FillRect(hdc, &rt, GetStockObject(BLACK_BRUSH));
}
//InvalidateRect(hWnd,NULL, 0); //此句不可丢,否则无法显示出要画的位图, 改在定时器中刷新窗口....
// LCDSIM_CheckInit(hWnd);
LCDSIM_Paint(hdc);
EndPaint(hWnd, &ps);
break;
case WM_RBUTTONDOWN:;
TrackMenuPoint.x = LOWORD(lParam);
TrackMenuPoint.y = HIWORD(lParam);
ClientToScreen(hWnd, &TrackMenuPoint);
TrackPopupMenu(hMenuPopup, TPM_RIGHTBUTTON, TrackMenuPoint.x, TrackMenuPoint.y, 0, hWndMain, 0);
break;
case WM_DESTROY:
for(i = 0; i < MAXLCDNUM; i++){
if(hWnd == LCD_aWinData[i].lcd_hwnd){
LCD_aWinData[i].lcd_hwnd = 0;
LCD_aWinData[i].TimerID = 0;
break;
}
}
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
LRESULT CALLBACK LogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
// char buf[500];
// HWND log_edit = NULL;
RECT rt;
switch (message)
{
case WM_INITDIALOG:
{
// SetWindowPos(hDlg, 0, 0, LOG_y0, 50, wndWidth, 0);
GetWindowRect(hWndMain, &rt);
//MoveWindow(hDlg, rt.left, rt.top+LOG_y0, wndWidth, 150, 1);
MoveWindow(hDlg, rt.left, rt.bottom-10, wndWidth, 150, 1);
LOG_hWnd = GetDlgItem(hDlg, IDC_EDITLOG);
GetWindowRect(hDlg, &rt);
MoveWindow(LOG_hWnd, 0, 0, rt.right - rt.left-5, rt.bottom - rt.top-30, 1);
if(LOG_hWnd) SetWindowText(LOG_hWnd, (LPCTSTR)LOG_acBuffer);
return TRUE;
}
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
case WM_SIZE:
GetWindowRect(hDlg, &rt);
MoveWindow(LOG_hWnd, 0, 0, rt.right - rt.left-5, rt.bottom - rt.top-30, 1);
break;
case WM_DESTROY:
LOG_hWnd = 0;
}
return FALSE;
}
#define MotionLogWin_YSIZE 150
//显示Motion 的Debug 内容
LRESULT CALLBACK MotionLogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
RECT rt;
switch (message)
{
case WM_INITDIALOG:
{
//ShowWindow(hDlg,SW_SHOW);
// SetWindowPos(hDlg, 0, 0, LOG_y0, 50, wndWidth, 0);
GetWindowRect(hWndMain, &rt);
//MoveWindow(hDlg, rt.left, rt.top+LOG_y0, wndWidth, 150, 1);
MoveWindow(hDlg, rt.left, rt.bottom, wndWidth, MotionLogWin_YSIZE, 1);//窗口位置
hWnd_MotionLog = GetDlgItem(hDlg, IDC_MotionLog);
GetWindowRect(hDlg, &rt);
MoveWindow(hWnd_MotionLog, 0, 0, rt.right - rt.left-5, rt.bottom - rt.top-30, 1); //内部打印窗口位置
if(hWnd_MotionLog) SetWindowText(hWnd_MotionLog, (LPCTSTR)"Motion Debug Log");
return TRUE;
}
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
case WM_SIZE:
GetWindowRect(hDlg, &rt);
MoveWindow(hWnd_MotionLog, 0, 0, rt.right - rt.left-5, rt.bottom - rt.top-30, 1);
break;
case WM_DESTROY:
hWnd_MotionLog = 0;
}
return FALSE;
}
//显示MainTask 的Debug 内容
LRESULT CALLBACK MainTaskLogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
RECT rt;
switch (message)
{
case WM_INITDIALOG:
{
//ShowWindow(hDlg,SW_SHOW);
// SetWindowPos(hDlg, 0, 0, LOG_y0, 50, wndWidth, 0);
GetWindowRect(hWnd_MotionLog, &rt);
//MoveWindow(hDlg, rt.left, rt.top+LOG_y0, wndWidth, 150, 1);
MoveWindow(hDlg, rt.left, rt.bottom, wndWidth, MotionLogWin_YSIZE, 1);//窗口位置偏置于MotionLogProc
hWnd_MainTaskLog = GetDlgItem(hDlg, IDC_MainTaskLog);
GetWindowRect(hDlg, &rt);
MoveWindow(hWnd_MainTaskLog, 0, 0, rt.right - rt.left-5, rt.bottom - rt.top-30, 1); //内部打印窗口位置
if(hWnd_MainTaskLog)
{
//SendMessage(hWnd_MainTaskLog,LB_ADDSTRING,0,(LONG)"MainTask Debug Log");//SetWindowText(DispHWin, (LPCTSTR)LogBuffer);
SetWindowText(hWnd_MainTaskLog, (LPCTSTR)"MainTask Debug Log");
}
return TRUE;
}
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
case WM_SIZE:
GetWindowRect(hDlg, &rt);
MoveWindow(hWnd_MainTaskLog, 0, 0, rt.right - rt.left-5, rt.bottom - rt.top-30, 1);
break;
case WM_DESTROY:
hWnd_MainTaskLog = 0;
}
return FALSE;
}
#define HALSHMDispWin_XSize 200
#define HALSHMDispWin_YSize 300
LRESULT CALLBACK HALSHMDispProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
RECT rt;
switch (message)
{
case WM_INITDIALOG:
{
//ShowWindow(hDlg,SW_SHOW);
// SetWindowPos(hDlg, 0, 0, LOG_y0, 50, wndWidth, 0);
GetWindowRect(hWndMain, &rt);
//MoveWindow(hDlg, rt.left, rt.top+LOG_y0, wndWidth, 150, 1);
MoveWindow(hDlg, rt.right, rt.top, HALSHMDispWin_XSize, rt.bottom-rt.top, 1);
HWnd_MotionDisp = GetDlgItem(hDlg, IDC_MotionDisp);
GetWindowRect(hDlg, &rt);
MoveWindow(HWnd_MotionDisp, 0, 0, rt.right - rt.left-5, rt.bottom - rt.top-30, 1);
if(HWnd_MotionDisp)
{
//SendMessage(hWnd_MainTaskLog,LB_ADDSTRING,0,(LONG)"MainTask Debug Log");
SetWindowText(HWnd_MotionDisp, (LPCTSTR)"Moton HAL Data Disp");
}
//SetTimer(hDlg, 1, 2000, NULL);
return TRUE;
}
// case WM_TIMER:
// UpDataHALDisp();
// break;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
case WM_SIZE:
GetWindowRect(hDlg, &rt);
//MoveWindow(hWnd_MainTaskLog, 0, 0, rt.right - rt.left-5, rt.bottom - rt.top-30, 1);
break;
case WM_DESTROY:
HWnd_MotionDisp = 0;
break;
}
return FALSE;
}
// Mesage handler for about box.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
char buf[500];
switch (message)
{
case WM_INITDIALOG:
{
sprintf(buf, "About %s", BRANDING_GetAppNameLong());
SetWindowText(hDlg, buf);
SetDlgItemText(hDlg, ID_ABOUT_APPC, BRANDING_GetAppNameShort());
//SetDlgItemText(hDlg, ID_ABOUT_VERSION, GUI_GetVersionString());
SetDlgItemText(hDlg, ID_ABOUT_COPYRIGHT, BRANDING_GetCopyright());
return TRUE;
}
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}
int VirtKey2Key(int nVirtKey)
{
int key = 0, i = 0;
for(i = 0; i < VKEYNUM; i++)
{
if(aVKey2Key[i].VirCode == nVirtKey){
return aVKey2Key[i].key;
}
}
return key;
}
int Keydown2ASCII(int nVirtKey)
{
int key = 0, ret = -1;
char allKeyState[258];
GetKeyboardState(allKeyState);
ret = ToAscii(nVirtKey, MapVirtualKey(nVirtKey, 0), allKeyState, (LPWORD)&key, 0);
if(ret == 1) return key;
return key | nVirtKey;
}
int _KEY_;
int _keyCount_ = 0;
//VK_LEFT VK_SHIFT
void HandleKeyEvents(UINT message, WPARAM wParam)
{
int key = 0, keyCount = 0;
switch(message){
case WM_KEYDOWN:
key = VirtKey2Key(wParam);
if(key == 0) key = Keydown2ASCII(wParam);
keyCount = 1;
break;
case WM_KEYUP:
key = VirtKey2Key(wParam);
keyCount = 0;
break;
}
if(key != 0){
//GUI_StoreKeyMsg(key, keyCount);
_KEY_ = key;
_keyCount_ = keyCount;
}
}
int GUI_GetKey(void)
{
if(0 != _keyCount_){
_keyCount_ = 0;
return _KEY_;
}else{
return 0;
}
}
void MainWnd_OnTimer(HWND hWnd)
{
char MainWndTitle[200] = "(Executing)";
static char newMainWndTitle[200];
static int hasgetCaption = 0;
if(hasgetCaption++ == 0){
GetWindowText(hWnd, newMainWndTitle, 100);
}
sprintf(MainWndTitle, "%s %s", newMainWndTitle, "(Executing)");
SetWindowText(hWnd, MainWndTitle);
}
//WM_PAINT wParam在菜单消息当中即为菜单标志ID..
void MainWnd_Command(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId = 0, wmEvent = 0;
HWND hdlg;
long erro=0;
switch(message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
case IDM_NEWLCD:
CreateWndLCD();
break;
case IDM_LOG:
CreateDialogParam(hInst, (LPCTSTR)IDD_LOG, hWnd, (DLGPROC)LogProc, 0);
break;
case IDM_MotionLog:
hdlg = CreateDialog(hInst, (LPCTSTR)IDD_MotionLog, hWnd, (DLGPROC)MotionLogProc);
erro = GetLastError();
break;
case IDM_MainTaskLog:
hdlg = CreateDialog(hInst, (LPCTSTR)IDD_MainTaskLog, hWnd, (DLGPROC)MainTaskLogProc);
erro = GetLastError();
break;
case IDM_PAUSEAPP:
THREAD_StopApplication();
InitMenu(hMenuPopup);
break;
case IDM_RESUMEAPP:
THREAD_ContinueApplication();
InitMenu(hMenuPopup);
break;
case IDM_COPYCLIP:
break;
case 32774:
THREAD_StartApplication();
break;
default:
break;
}
}
}
///////////////////////////////////////////////////////////////////////
//
// 函数名 : MainWnd_Paint
// 功能描述 : 在模拟器主窗口当中画MICRIUM的标志[画于窗口中心处]...
// 参数 : HWND hwnd
// 返回值 : void
//
///////////////////////////////////////////////////////////////////////
void MainWnd_Paint(HWND hwnd, HDC hdc)
{
/* 2005-6-7 1:45:24
HDC hdc, hMemdc;
PAINTSTRUCT ps;*/
HDC hMemdc;
RECT rt;
int logo_x = 0, logo_y = 0;
BITMAP logobmpinfo;
int blt = 0;
HBITMAP logoBmp = 0;
/* 2005-6-7 1:45:29
InvalidateRect(hwnd,NULL,FALSE); //此句不可丢,否则无法显示出要画的位图...
hdc = BeginPaint(hwnd, &ps);*/
hMemdc = CreateCompatibleDC(hdc);
GetClientRect(hwnd, &rt);
logoBmp = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_LOGO));
GetObject(logoBmp, 0x18, &logobmpinfo);
logo_x = (rt.right - logobmpinfo.bmWidth - rt.left)/2;
logo_y = (rt.bottom - logobmpinfo.bmHeight - rt.top)/2;
SelectObject(hMemdc, hLogo);
blt = BitBlt(hdc, logo_x, logo_y, logobmpinfo.bmWidth, logobmpinfo.bmHeight, hMemdc, 0, 0, SRCCOPY);
DeleteObject(logoBmp);
DeleteDC(hMemdc);
// EndPaint(hwnd, &ps);
}
#include "mmsystem.h"
void main(void);
int APIENTRY WinMain_NoClean(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
int ret = 0;
HWND hWnd;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -