隔一段时间就忘了怎么在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);
}
分享到:
相关推荐
标题中的"ffmpeg-git-de545d2-win32-static.7z"揭示了这是一个针对Windows 32位系统的静态编译版本的FFmpeg,而且是通过Git版本控制系统获取的特定版本(de545d2)。这个版本可能是开发者的快照,或者是某个优化或...
功能包括用户,角色,菜单管理, 实现了RBAC模型权限控制。 d2-admin-web d2-admin前端框架 d2-admin-api springboot基于restful api接口规范框架 数据文件在d2-admin-api/db目录下
标题 "d2d控件,win10,script" 暗示了本文将深入探讨Direct2D(简称D2D)控件在Windows 10操作系统中的使用,以及与脚本编程相关的技术。Direct2D是微软开发的一个高性能、硬件加速的2D图形渲染API,它为开发者提供了...
5. **API接口规范**:D2框架遵循RESTful API设计原则,提供统一的接口调用方式,方便与其他后端服务进行通信,实现装备信息的同步。 6. **性能优化**:D2框架考虑了大流量、高并发场景下的性能问题,通过懒加载、...
在“D2RQ 下载 win和linux都有”这个资源中,包含的是D2RQ的0.81版本,这是截止描述时的最新版本。D2RQ的这个版本提供对两种主流操作系统的支持,即Windows和Linux,这使得无论是在个人电脑还是服务器环境下,都能...
《深入解析Win32Project1.zip中的D2D绘图技术》 Win32Project1.zip是一个包含了微软官方示例程序的压缩包,这个程序主要展示了Direct2D(简称D2D)在Windows应用程序中的应用,包括D2D的图形绘制、右键菜单绘制以及...
本项目深入探究并优化了基于Python的d2l-zh深度学习框架设计源码。项目包含651个文件,涵盖223个SVG图表、186个PNG图像、175个Markdown文档、35个JPG图片、12个Python源代码文件、3个GIF动画、2个INI配置文件、2个...
《D2NT 1.13补丁:深入探索D2NTbot与暗黑破坏神2的游戏自动化》 D2NT(Diablo 2 No Trade)1.13补丁是一个专门为暗黑破坏神2(Diablo 2)设计的游戏增强工具,其核心功能是D2NTbot,一个自动化的游戏助手。这个补丁...
这是一个基于vue cli 3.0以上的一个后台管理系统框架,下载之后使用npm i即可安装依赖,npm run serve即可使用;使用者需要熟悉vue和node.js,需要先下载node.js;如果npm i下载失败可切换到淘宝镜像安装;详情可浏览...
"全名:python-3.5.0a4-embed-win32.exe" 描述了该文件的完整名称,其中“embed”表示这是一个嵌入式版本,意味着它包含所有必要的组件,可以在不依赖全局Python环境的情况下独立运行。这对于开发人员或者需要在没有...
【标题】"D2NT_d2nt1.13c_ntbot_d2nt_d2ntbot_d2NT私服" 指的是一个基于《暗黑破坏神2》(Diablo II)的游戏服务器软件,通常用于建立私人游戏服务器,即"D2NT私服"。这个版本是1.13c,这是《暗黑破坏神2》的一个经典...
- 提供不同芯片配置,如512Mbit×32、1Gbit×32、2Gbit×32等。 - 支持不同芯片封装,包括512M 16×2芯片封装在内、512M 16×4芯片封装在内、1024M 8×8芯片封装在内。 - 封装方式包括200-ball WFBGA(10.0mm×...
这是一个基于Flask框架构建的,采用了D2-admin作为前端管理界面的鉴权管理系统。它提供了管理员管理、菜单管理、角色管理、接口管理、文档管理、数据库管理以及日志查看等功能。项目采用了Python语言开发,具有清晰...
本文档是Future Technology Devices International Ltd.(FTDI)发布的《Java D2xx for Android API User Manual》的概述,版本号为1.0,文档参考号FT_000796,发布日期为2013年2月5日。该手册提供了Java D2xx for ...
在本文中,我们将深入探讨如何使用Delphi编程语言与钉钉API进行集成,以便从魔点D2人脸识别考勤系统中下载考勤记录。魔点D2是一款智能人脸识别考勤设备,它能够与钉钉办公平台无缝对接,实现自动化的考勤管理。为了...
D2RQ的核心理念在于,它提供了一个框架,使得RDB中的数据可以被映射为符合Resource Description Framework (RDF)标准的语义网数据,从而使得传统数据库中的信息能够更好地融入到全球开放的Web环境中。 1. **D2RQ...
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-develop”目录下,包含各种开发相关文件。对于想要深入理解或贡献这个项目的开发者来说,需要熟悉JavaScript编程,Node.js后端开发,以及REST API的设计和测试方法。