📄 wcemain.cpp
字号:
// mcowce.cpp : Defines the entry point for the application.
//
#include "platform.h"
#include "../inc/wcemain.h"
#include <commctrl.h>
#define MAX_LOADSTRING 2048
extern "C"
{
extern char scr[];
extern char input[256];
extern int inoffs;
extern HANDLE InEvent;
extern char* __cdecl gets(char* str);
HWND hscr;
}
extern void __cdecl main(int argc, char** argv);
TCHAR szHello[MAX_LOADSTRING];
HANDLE hMain;
HWND hScr;
char* argv[2] =
{
"", input
};
// Global Variables:
HINSTANCE hInst; // The current instance
HWND hwndCB; // The command bar handle
// Forward declarations of functions included in this code module:
ATOM MyRegisterClass(HINSTANCE, LPTSTR);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
void MainThread(void* pp)
{
int argc = 0;
char* argv[10];
char str[128];
char* p = str;
printf("Console imitator. Enter options (if any) <Enter>: ");
gets(str);
argc = 1;
argv[0] = str;
for (; * p != 0;)
{
if (*p == '\r')
{
break;
}
argv[argc] = p;
argc++;
while (*p != ' ')
{
if (*p++ == 0)
{
goto End;
}
}
*p++ = 0;
while (*p == ' ')
{
p++;
}
}
End:
main(argc, argv);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
MSG msg;
HACCEL hAccelTable;
// Perform application initialization:
if (!InitInstance(hInstance, nCmdShow))
{
return FALSE;
}
hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_MCOWCE);
ShowWindow(hscr, 1);
hMain = (HANDLE)_beginthread((void(__cdecl*)(void*))MainThread, 0, argv);
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
//
// FUNCTION: MyRegisterClass()
//
// PURPOSE: Registers the window class.
//
// COMMENTS:
//
// It is important to call this function so that the application
// will get 'well formed' small icons associated with it.
//
ATOM MyRegisterClass(HINSTANCE hInstance, LPTSTR szWindowClass)
{
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC)WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MCOWCE));
wc.hCursor = 0;
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = 0;
wc.lpszClassName = szWindowClass;
return RegisterClass(&wc);
}
//
// FUNCTION: InitInstance(HANDLE, int)
//
// PURPOSE: Saves instance handle and creates main window
//
// COMMENTS:
//
// In this function, we save the instance handle in a global variable and
// create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING]; // The window class name
hInst = hInstance; // Store instance handle in our global variable
// Initialize global strings
LoadString(hInstance, IDC_MCOWCE, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance, szWindowClass);
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
hWnd = CreateWindow(szWindowClass, szTitle, WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL);
hscr = hScr = hWnd; //
if (!hWnd)
{
return FALSE;
}
InEvent = CreateEvent(NULL, 0, 0, NULL);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
if (hwndCB)
{
CommandBar_Show(hwndCB, TRUE);
}
return TRUE;
}
//
// FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
//
// PURPOSE: Processes messages for the main window.
//
// WM_COMMAND - process the application menu
// WM_PAINT - Paint the main window
// WM_DESTROY - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
int wmId, wmEvent;
PAINTSTRUCT ps;
int len, offs;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_HELP_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
case IDM_FILE_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_CREATE:
hwndCB = CommandBar_Create(hInst, hWnd, 1);
CommandBar_InsertMenubar(hwndCB, hInst, IDM_MENU, 0);
CommandBar_AddAdornments(hwndCB, 0, 0);
break;
case WM_PAINT:
{
RECT rt;
InvalidateRect(hWnd, NULL, TRUE);
hdc = BeginPaint(hWnd, &ps);
GetClientRect(hWnd, &rt);
LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);
MultiByteToWideChar(CP_ACP, 0, scr, len = strlen(scr) + 1, szHello, MAX_LOADSTRING);
len = _tcslen(szHello);
szHello[len] = 0;
DrawText(hdc, szHello, len = _tcslen(szHello), &rt, DT_TOP | DT_LEFT);
EndPaint(hWnd, &ps);
}
break;
case WM_DESTROY:
CommandBar_Destroy(hwndCB);
PostQuitMessage(0);
Sleep(80);
break;
case WM_CHAR:
offs = inoffs;
inoffs += WideCharToMultiByte(CP_ACP, // code page
0, // performance and mapping flags
(LPCWSTR) &wParam, // address of wide-character string
1, // number of characters in string
(LPSTR) &input[inoffs], // address of buffer for new string
256, // size of buffer
NULL, // address of default for unmappable characters
0 // address of flag set when default char. used
);
if (input[offs] == '\r')
{
SetEvent(InEvent);
}
input[inoffs] = 0;
printf("%s", &input[offs]);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
// Mesage handler for the About box.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
RECT rt, rt1;
int DlgWidth, DlgHeight; // dialog width and height in pixel units
int NewPosX, NewPosY;
switch (message)
{
case WM_INITDIALOG:
// trying to center the About dialog
if (GetWindowRect(hDlg, &rt1))
{
GetClientRect(GetParent(hDlg), &rt);
DlgWidth = rt1.right - rt1.left;
DlgHeight = rt1.bottom - rt1.top;
NewPosX = (rt.right - rt.left - DlgWidth) / 2;
NewPosY = (rt.bottom - rt.top - DlgHeight) / 2;
// if the About box is larger than the physical screen
if (NewPosX < 0)
{
NewPosX = 0;
}
if (NewPosY < 0)
{
NewPosY = 0;
}
SetWindowPos(hDlg, 0, NewPosX, NewPosY, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
}
return TRUE;
case WM_COMMAND:
if ((LOWORD(wParam) == IDOK) || (LOWORD(wParam) == IDCANCEL))
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -