⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wcemain.c

📁 PB 熟悉的哥们希望大家可以互相学习一下
💻 C
字号:
// mcowce.cpp : Defines the entry point for the application.
//
#include "platform.h"
#include "../inc/wcemain.h"
#include <commctrl.h>


#define MAX_LOADSTRING 2048

extern char scr[];
extern char input[256];
extern int inoffs;
extern HANDLE InEvent;

HWND hscr;

extern void __cdecl main(int argc, char** argv);

TCHAR szHello[MAX_LOADSTRING];
HANDLE hMain;

// Global Variables:
HINSTANCE hInst; // The current instance
HWND hwndCB; // The command bar handle
HWND hScr;

// 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);
	Sleep(10000);
    PROG_EXIT(0);
}

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, 0);

    // 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_SINGLELINE | DT_VCENTER | DT_CENTER);
                DT_TOP | DT_LEFT);
                EndPaint(hWnd, &ps);
            }
            break;

        case WM_DESTROY:
            CommandBar_Destroy(hwndCB);
            PostQuitMessage(0);
            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')
            {
                //        input[offs] = 0;
                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 + -