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
是啊,根本没必要动这个部分,不兼容的也就是这里。
Global site tag (gtag.js) - Google Analytics