读书人

D2 上win32 api 中文框架备忘

发布时间: 2012-12-28 10:29:05 作者: rapoo

D2 下win32 api 中文框架备忘
隔一段时间就忘了怎么在D2下win32 SDK框架里使用中文,这次记在这里.

/+ + Copyright (c) Charles Petzold, 1998. + Ported to the D Programming Language by Andrej Mitrovic, 2011. +/module HelloWin;import core.runtime;import std.string;import std.utf;pragma(lib, "gdi32.lib");pragma(lib, "winmm.lib");import win32.windows;import win32.mmsystem;import win32.windef;import win32.winuser;import win32.wingdi;extern(Windows)int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow){    int result;    void exceptionHandler(Throwable e) { throw e; }    try    {        Runtime.initialize(&exceptionHandler);        result = myWinMain(hInstance, hPrevInstance, lpCmdLine, iCmdShow);        Runtime.terminate(&exceptionHandler);    }    catch(Throwable o)    {        MessageBox(null, o.toString().ptr, "Error", MB_OK | MB_ICONEXCLAMATION);        result = 0;    }    return result;}int myWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow){    string appName = "sampleWin";    wstring caption="窗口";    HWND hwnd;    MSG  msg;    WNDCLASS wndclass;    wndclass.style         = CS_HREDRAW | CS_VREDRAW;    wndclass.lpfnWndProc   = &WndProc;    wndclass.cbClsExtra    = 0;    wndclass.cbWndExtra    = 0;    wndclass.hInstance     = hInstance;    wndclass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);    wndclass.hCursor       = LoadCursor(NULL, IDC_ARROW);    wndclass.hbrBackground = cast(HBRUSH)GetStockObject(WHITE_BRUSH);    wndclass.lpszMenuName  = NULL;    wndclass.lpszClassName = "simplewin";    if(!RegisterClass(&wndclass))    {        MessageBox(NULL, "本程序需要 Windows NT以上版本!", "提示", MB_ICONERROR);        return 0;    }    hwnd = CreateWindowW("simplewin",      // window class name                         (caption~"\000").ptr,  // window caption                         WS_OVERLAPPEDWINDOW,  // window style                         CW_USEDEFAULT,        // initial x position                         CW_USEDEFAULT,        // initial y position                         CW_USEDEFAULT,        // initial x size                         CW_USEDEFAULT,        // initial y size                         NULL,                 // parent window handle                         NULL,                 // window menu handle                         hInstance,            // program instance handle                         NULL);                // creation parameters    ShowWindow(hwnd, iCmdShow);    UpdateWindow(hwnd);    while (GetMessage(&msg, NULL, 0, 0))    {        TranslateMessage(&msg);        DispatchMessage(&msg);    }    return msg.wParam;}extern(Windows)LRESULT WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){    wstring greetings="欢迎来到WIN32编程!";    HDC hdc;    PAINTSTRUCT ps;    RECT rect;    switch (message)    {        case WM_CREATE:            PlaySound("hellowin.wav", NULL, SND_FILENAME | SND_ASYNC);            return 0;        case WM_PAINT:            hdc = BeginPaint(hwnd, &ps);            scope(exit) EndPaint(hwnd, &ps);            GetClientRect(hwnd, &rect);            DrawTextW(hdc, (greetings~"\000").ptr, -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);            return 0;        case WM_DESTROY:            PostQuitMessage(0);            return 0;        default:    }   return DefWindowProc(hwnd, message, wParam, lParam);}

读书人网 >编程

热点推荐