`
betty_betty2008
  • 浏览: 24700 次
  • 性别: Icon_minigender_1
  • 来自: 东莞
最近访客 更多访客>>
社区版块
存档分类
最新评论

D2 下win32 api 中文框架备忘

    博客分类:
  • D
阅读更多
隔一段时间就忘了怎么在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);
}
  • HelloWin.7z (12.4 KB)
  • 描述: hellowin.wav
  • 下载次数: 1
分享到:
评论

相关推荐

    ffmpeg-git-de545d2-win32-static.7z

    标题中的"ffmpeg-git-de545d2-win32-static.7z"揭示了这是一个针对Windows 32位系统的静态编译版本的FFmpeg,而且是通过Git版本控制系统获取的特定版本(de545d2)。这个版本可能是开发者的快照,或者是某个优化或...

    d2-admin前端和后端代码

    功能包括用户,角色,菜单管理, 实现了RBAC模型权限控制。 d2-admin-web d2-admin前端框架 d2-admin-api springboot基于restful api接口规范框架 数据文件在d2-admin-api/db目录下

    d2d控件,win10,script

    标题 "d2d控件,win10,script" 暗示了本文将深入探讨Direct2D(简称D2D)控件在Windows 10操作系统中的使用,以及与脚本编程相关的技术。Direct2D是微软开发的一个高性能、硬件加速的2D图形渲染API,它为开发者提供了...

    D2框架装备.rar

    5. **API接口规范**:D2框架遵循RESTful API设计原则,提供统一的接口调用方式,方便与其他后端服务进行通信,实现装备信息的同步。 6. **性能优化**:D2框架考虑了大流量、高并发场景下的性能问题,通过懒加载、...

    D2RQ 下载 win和linux都有

    在“D2RQ 下载 win和linux都有”这个资源中,包含的是D2RQ的0.81版本,这是截止描述时的最新版本。D2RQ的这个版本提供对两种主流操作系统的支持,即Windows和Linux,这使得无论是在个人电脑还是服务器环境下,都能...

    Win32Project1.zip

    《深入解析Win32Project1.zip中的D2D绘图技术》 Win32Project1.zip是一个包含了微软官方示例程序的压缩包,这个程序主要展示了Direct2D(简称D2D)在Windows应用程序中的应用,包括D2D的图形绘制、右键菜单绘制以及...

    基于Python的d2l-zh深度学习框架设计源码学习与优化

    本项目深入探究并优化了基于Python的d2l-zh深度学习框架设计源码。项目包含651个文件,涵盖223个SVG图表、186个PNG图像、175个Markdown文档、35个JPG图片、12个Python源代码文件、3个GIF动画、2个INI配置文件、2个...

    D2NT 1.13 patch_D2NTbot_d2nt_d2nt3.1_d2暗黑D2NTbot_diablo21.13kpbo

    《D2NT 1.13补丁:深入探索D2NTbot与暗黑破坏神2的游戏自动化》 D2NT(Diablo 2 No Trade)1.13补丁是一个专门为暗黑破坏神2(Diablo 2)设计的游戏增强工具,其核心功能是D2NTbot,一个自动化的游戏助手。这个补丁...

    d2admin后台框架

    这是一个基于vue cli 3.0以上的一个后台管理系统框架,下载之后使用npm i即可安装依赖,npm run serve即可使用;使用者需要熟悉vue和node.js,需要先下载node.js;如果npm i下载失败可切换到淘宝镜像安装;详情可浏览...

    python官方3.5.0a4-embed-win32版本exe安装包

    "全名:python-3.5.0a4-embed-win32.exe" 描述了该文件的完整名称,其中“embed”表示这是一个嵌入式版本,意味着它包含所有必要的组件,可以在不依赖全局Python环境的情况下独立运行。这对于开发人员或者需要在没有...

    D2NT_d2nt1.13c_ntbot_d2nt_d2ntbot_d2NT私服_

    【标题】"D2NT_d2nt1.13c_ntbot_d2nt_d2ntbot_d2NT私服" 指的是一个基于《暗黑破坏神2》(Diablo II)的游戏服务器软件,通常用于建立私人游戏服务器,即"D2NT私服"。这个版本是1.13c,这是《暗黑破坏神2》的一个经典...

    MT53E512M32D2-LPDDR4 2GB.pdf

    - 提供不同芯片配置,如512Mbit×32、1Gbit×32、2Gbit×32等。 - 支持不同芯片封装,包括512M 16×2芯片封装在内、512M 16×4芯片封装在内、1024M 8×8芯片封装在内。 - 封装方式包括200-ball WFBGA(10.0mm×...

    基于D2-admin框架的鉴权管理Flask系统.zip

    这是一个基于Flask框架构建的,采用了D2-admin作为前端管理界面的鉴权管理系统。它提供了管理员管理、菜单管理、角色管理、接口管理、文档管理、数据库管理以及日志查看等功能。项目采用了Python语言开发,具有清晰...

    AN_233_Java_D2xx_for_Android_API_User_Manual

    本文档是Future Technology Devices International Ltd.(FTDI)发布的《Java D2xx for Android API User Manual》的概述,版本号为1.0,文档参考号FT_000796,发布日期为2013年2月5日。该手册提供了Java D2xx for ...

    魔点D2-钉钉考勤记录下载源码

    在本文中,我们将深入探讨如何使用Delphi编程语言与钉钉API进行集成,以便从魔点D2人脸识别考勤系统中下载考勤记录。魔点D2是一款智能人脸识别考勤设备,它能够与钉钉办公平台无缝对接,实现自动化的考勤管理。为了...

    d2rq-0.8.1

    D2RQ的核心理念在于,它提供了一个框架,使得RDB中的数据可以被映射为符合Resource Description Framework (RDF)标准的语义网数据,从而使得传统数据库中的信息能够更好地融入到全球开放的Web环境中。 1. **D2RQ...

    eclipse-java-oxygen-1a-win32.zip

    eclipse-java-oxygen-1a-win32.zip Eclipse java oxygen (兼容32位) java版本 Eclipse IDE for Java Developers The essential tools for any Java developer, including a Java IDE, a Git client, XML Editor, ...

    d2-armory-api:用于d2-armory应用程序的Rest API Server

    项目源代码可能分布在“d2-armory-api-develop”目录下,包含各种开发相关文件。对于想要深入理解或贡献这个项目的开发者来说,需要熟悉JavaScript编程,Node.js后端开发,以及REST API的设计和测试方法。

Global site tag (gtag.js) - Google Analytics