win32下用tango建一个空窗口

shawind 2007-04-07
import tango.sys.win32.UserGdi;
extern(Windows)
enum {
WS_EX_DLGMODALFRAME =0x00000001,
WS_EX_NOPARENTNOTIFY =0x00000004,
WS_EX_TOPMOST =0x00000008,
WS_EX_ACCEPTFILES =0x00000010,
WS_EX_TRANSPARENT =0x00000020,
WS_EX_MDICHILD =0x00000040,
WS_EX_TOOLWINDOW =0x00000080,
WS_EX_WINDOWEDGE =0x00000100,
WS_EX_CLIENTEDGE =0x00000200,
WS_EX_CONTEXTHELP =0x00000400,
WS_EX_RIGHT =0x00001000,
WS_EX_LEFT =0x00000000,
WS_EX_RTLREADING =0x00002000,
WS_EX_LTRREADING =0x00000000,
WS_EX_LEFTSCROLLBAR =0x00004000,
WS_EX_RIGHTSCROLLBAR =0x00000000,
WS_EX_CONTROLPARENT =0x00010000,
WS_EX_STATICEDGE =0x00020000,
WS_EX_APPWINDOW =0x00040000,
WS_EX_OVERLAPPEDWINDOW =(WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE),
WS_EX_PALETTEWINDOW =(WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST)
}

extern(Windows)
LRESULT WndProc( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp ){
switch( msg ){
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProcA( hwnd, msg, wp, lp );
}
return 0;
}

void main(){
WNDCLASSEX wc;
HWND hwnd;
MSG msg;
wc.cbSize = WNDCLASSEX.sizeof;
wc.lpszClassName = "DWndClass";
wc.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = &WndProc;
wc.hInstance = GetModuleHandleA(null);
wc.hIcon = LoadIconA(cast(HINSTANCE) null, IDI_APPLICATION);
wc.hCursor = LoadCursorA(cast(HINSTANCE) null, IDC_CROSS);
wc.hbrBackground = cast(HBRUSH) (COLOR_WINDOW + 1);
wc.lpszMenuName = null;
if(!RegisterClassExA(&wc)){
MessageBoxA(null,"Window Registration Failed!","Error!",MB_OK);
return 0;
}

hwnd = CreateWindowExA(
WS_EX_ACCEPTFILES,
wc.lpszClassName,
"MyWindow",
WS_OVERLAPPEDWINDOW|WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT, 800, 600,
null, null, wc.hInstance, null );

if(hwnd is null){
MessageBoxA(null,"Window Creation Failed!","Error!",MB_OK);
return 0;
}

while(GetMessageA(&msg,null,0,0)>0){
TranslateMessage(&msg);
DispatchMessageA(&msg);}
}
---------------------
就这么一个入门程序折腾了半天才通过编译。
D的文档实在是太贫乏了。
jinheking 2007-04-09
使用DFL吧!
shawind 2007-04-09
这个,其实我只是打算写一个窗口来容纳OpengGL,应该还不用劳烦DFL他老人家吧(^o^)
oldrev 2007-04-09
还没真正地用过tango,感觉 phobos 的 util 风格的标准库实在是太好用了,尤其是 std.file, std.path,用过就知道了
player7 2007-04-10
为什么不用SDL呢? 窗口是有了,可是控制呢?声音呢? 图形载入呢?
shawind 2007-04-10
oldrev 写道
还没真正地用过tango,感觉 phobos 的 util 风格的标准库实在是太好用了,尤其是 std.file, std.path,用过就知道了


才开始用Tango,还没有体会到他的优点,麻烦之处倒已经遇到了不少。


player7 写道
为什么不用SDL呢? 窗口是有了,可是控制呢?声音呢? 图形载入呢?


这个,我居然给忘了SDL还有其他作用....
自己从头再写一遍似乎有点无聊。
qiezi 2007-04-10
tango是比较麻烦,因为它我已经抛弃了好多库了,很多库都依赖它。
tomqyp 2007-04-10
其实错不在tango,知道了tango我就一直在用
大多数比较麻烦的情况是因为,tango好像重写了object,所以对phobo的库不兼容,许多库如果要在tango下用的话,最好用tango再编译一次
或者直接使用bud.exe这个工具.
oldrev 2007-04-11
tango不知怎么的重写了运行时,还 Object把 toString 换成了别扭的 toUtf8,结果搞的和标准库不兼容,不知他们怎么想的
qiezi 2007-04-11
是啊,根本没必要动这个部分,不兼容的也就是这里。

相关讨论