一个空窗口
以前看到不少的例子,都是要从WinMain入口,然后自己手动开启GC子。后来玩GDC的时候,发现用这个方法就很麻烦了。
gdc的gc方面的函数名和dmd不一样,最后link的时候,还得去用gcc的lib,不是一般的麻烦。
后来参考了下dfl的处理办法,可以直接从D的main入口,就是不知道这么做,会不会有什么问题。
(对这些东西背后的原理不熟悉。)
import win32.windows;
pragma(lib,"gdi32.lib");
HINSTANCE Hi;
HWND Hw;
WNDCLASSEXW Wc;
int main(char[][] args)
{
Hi = GetModuleHandleW(null);
assert(Hi);
Wc.lpszClassName = "MyClass";
Wc.cbSize = WNDCLASSEXW.sizeof;
Wc.lpfnWndProc = &winProc;
Wc.hInstance = Hi;
Wc.style = CS_CLASSDC;
Wc.hIcon = null;
Wc.hCursor = null;
Wc.hbrBackground = cast(HBRUSH)GetStockObject(BLACK_BRUSH);
Wc.lpszMenuName = null;
Wc.cbClsExtra = 0;
Wc.cbWndExtra = 0;
auto t = RegisterClassExW(&Wc);
assert(t);
int WindowWidth = 800 + GetSystemMetrics(SM_CXEDGE) + GetSystemMetrics(SM_CXBORDER) + GetSystemMetrics(SM_CXDLGFRAME);
int WindowHeight = 600 + GetSystemMetrics(SM_CYEDGE) + GetSystemMetrics(SM_CYBORDER) + GetSystemMetrics(SM_CYDLGFRAME) + GetSystemMetrics(SM_CYCAPTION);
int WindowPositionX = GetSystemMetrics(SM_CXSCREEN)/2 - WindowWidth/2;
int WindowPositionY = GetSystemMetrics(SM_CYSCREEN)/2 - WindowHeight/2;
Hw = CreateWindowExW(WS_EX_APPWINDOW, "MyClass", "一个例子",
WS_POPUPWINDOW | WS_CAPTION | WS_MINIMIZEBOX,
WindowPositionX, WindowPositionY, WindowWidth, WindowHeight,
null, null, Hi, null);
assert(Hw);
ShowWindow(Hw,SW_SHOW);
auto MSG Msg;
while(GetMessageW(&Msg, cast(HWND)null, 0, 0))
{
TranslateMessage(&Msg);
DispatchMessageW(&Msg);
}
UpdateWindow(Hw);
return 0;
}
extern(Windows) int winProc(HWND Hwnd, uint Msg, WPARAM Wparam, LPARAM Lparam)
{
switch (Msg)
{
case WM_CLOSE:
DestroyWindow(Hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_PAINT:
showText(Hwnd);
break;
default:
break;
}
return DefWindowProcW(Hwnd, Msg, Wparam, Lparam);
}
void showText(HWND Hwnd)
{
HDC Hdc;
PAINTSTRUCT Paint;
wchar* str = "只是一个空窗口";
Hdc = BeginPaint(Hwnd, &Paint);
TextOutW(Hdc, 300, 200, str, 2*str.sizeof);
EndPaint(Hwnd, &Paint);
}
需要bindings项目中的win32库,这里面的unicode系的winapi函数才是全的。
存为uft-16le格式后,dmd test.d -L/exet:nt/su:windows:4.0 即可。 哟,你现在编辑D的文件用啥编辑器?进来Descent的进展还挺不错的,已经相当可用了呢。有没有用? 我没有用Descent,因为我的机子比较老,还是单核的,跑纯Java的IDE还是太吃力了。按别人说的优化后,反应还是迟钝,效果不明显。
一直在用的是Code::Blocks,虽然自动完成的能力差了点,但是可以不换IDE直接用上我机子里dmd,dmc,vc,gcc等命令行编译器。有利有弊。 我的老笔记本也很老了啊,04年的。现在不照样经常开着两个VS2008在跑……Eclipse近来的速度也还不错啦,虽然Descent我没用不知道现在性能表现如何。 可能是我的pf8060的问题吧,
因为我不爱用鼠标,而这个笔的驱动程序写的不好,运行太耗资源的大程序,笔的响应就有点问题.(SAI、PS等软件除外)
我把他驱动的client部分设为realtime了,server部分不知道怎么调。也不能彻底解决被别的程序强占的毛病.
ps.问一下,怎么调节注册为系统服务的程序在启动时的优先级。
ps2.45nm的四核快掉价,我要升级。
页:
[1]