Win32API Window and Tango
Denis Koroskin
2korden at gmail.com
Wed Aug 27 08:14:37 PDT 2008
On Wed, 27 Aug 2008 19:07:27 +0400, Zarathustra
<adam.chrapkowski at gmail.com> wrote:
> Denis Koroskin Wrote:
>
>> On Wed, 27 Aug 2008 18:24:52 +0400, Zarathustra
>> <adam.chrapkowski at gmail.com> wrote:
>>
>> > How to create WIN32Window with Tango?
>> > Why window handle is null?
>> >
>> > module test;
>> > import tango.sys.win32.UserGdi;
>> > extern (C) void rt_init( void delegate(Exception) dg = null );
>> > extern (C) void rt_term( void delegate(Exception) dg = null );
>> >
>> > extern(Windows)HWND CreateWindowExA(DWORD, LPCSTR, LPCSTR, DWORD,
>> > int, int, int, int, HWND, HMENU, HINSTANCE, LPVOID);
>> > extern(Windows)HGDIOBJ GetStockObject(int);
>> >
>> >
>> //_____________________________________________________________________________________________________________________
>> > // C functions
>> > //
>> >
>> > // function WinMain
>> >
>> //_____________________________________________________________________________________________________________________
>> > extern (Windows) int
>> > WinMain(HINSTANCE o_hInstance, HINSTANCE o_hPrevInstance, LPSTR
>> > o_lpCmdLine, int o_nCmdShow){
>> >
>> > rt_init();
>> >
>> > int l_result;
>> > try{
>> > l_result = Main(o_hInstance, o_hPrevInstance, o_lpCmdLine,
>> o_nCmdShow);
>> > }
>> > catch(Object o){
>> > MessageBoxA(null, cast(char*)o.toString(), "Fatal Error", MB_OK |
>> > MB_ICONERROR);
>> > l_result = 0;
>> > }
>> > rt_term();
>> > return l_result;
>> > }
>> >
>> > // function WindowProc
>> >
>> //_____________________________________________________________________________________________________________________
>> > extern (Windows) int
>> > WindowProc(HWND o_hWindow, uint o_message, WPARAM o_wParam, LPARAM
>> > o_lParam){
>> > switch(o_message){
>> >
>> > case WM_CREATE:
>> > return 0;
>> >
>> > case WM_CLOSE:
>> > PostQuitMessage(0);
>> > return 0;
>> >
>> > case WM_DESTROY:
>> > return 0;
>> >
>> > case WM_KEYDOWN:
>> > switch(o_wParam){
>> > default:
>> > return 0;
>> > }
>> > return 0;
>> >
>> > default:
>> > return DefWindowProcA(o_hWindow, o_message, o_wParam, o_lParam);
>> > }
>> > }
>> >
>> >
>> //_____________________________________________________________________________________________________________________
>> > // D functions
>> > //
>> >
>> > // function Main
>> >
>> //_____________________________________________________________________________________________________________________
>> > int
>> > Main(HINSTANCE o_hInstance, HINSTANCE o_hPrevInstance, LPSTR
>> > o_lpCmdLine, int o_nCmdShow){
>> >
>> > // register window class
>> >
>> //____________________________________________________________________
>> > WNDCLASS l_cWindow;
>> > with(l_cWindow){
>> > style = CS_OWNDC;
>> > lpfnWndProc = &WindowProc;
>> > cbClsExtra = 0;
>> > cbWndExtra = 0;
>> > hInstance = hInstance;
>> > hIcon = LoadIconA(cast(HINSTANCE)null, IDI_APPLICATION);
>> > hCursor = LoadCursorA(cast(HINSTANCE)null, IDC_ARROW);
>> > hbrBackground = cast(HBRUSH)GetStockObject(BLACK_BRUSH);
>> > lpszMenuName = null;
>> > lpszClassName = "WINDOWCLASS";
>> > }
>> > assert(RegisterClassA(&l_cWindow));
>> >
>> > // create main window
>> >
>> //____________________________________________________________________
>> > HWND l_hWindow = CreateWindowExA(
>> > 0,
>> > "WINDOWCLASS",
>> > "WINDOWCLASS",
>> > WS_CAPTION | WS_VISIBLE | WS_OVERLAPPEDWINDOW,
>> > 100,
>> > 100,
>> > 640,
>> > 640,
>> > HWND_DESKTOP,
>> > cast(HMENU)null,
>> > o_hInstance,
>> > null
>> > );
>> > assert(l_hWindow); // <- error l_hWindow is null
>> >
>> > // show window
>> >
>> //____________________________________________________________________
>> > ShowWindow(l_hWindow, SW_SHOW);
>> > UpdateWindow(l_hWindow);
>> >
>> > // program main loop
>> >
>> //____________________________________________________________________
>> > MSG l_message;
>> > msgsPomp:
>> > while(true){
>> >
>> > // check for messages
>> > if(PeekMessageA(&l_message, cast(HWND)null, 0, 0, PM_REMOVE)){
>> >
>> > // handle or dispatch messages
>> > if(l_message.message == WM_QUIT){
>> > break msgsPomp;
>> > }
>> > else{
>> > TranslateMessage(&l_message);
>> > DispatchMessageA(&l_message);
>> > }
>> > }
>> > else{
>> > Sleep(20);
>> > }
>> > }
>> > return l_message.wParam;
>> > }
>>
>> Hmm.. I have no problems with your code, it shown an empty black window
>> with a "WINDOWCLASS" caption.
>
> I don't have any idea what's wrong?
> Tango 0.97
> I'm dsss user:
>
> command line:
> dsss build test.d
>
> dsss.conf;
> [test.d]
> buildflags+=-L/exet:nt
> buildflags+=-L/su:windows:5
> buildflags+=-full
I use "dmd app.d gdi32.lib".
Don't know what Tango version it is, but it is bundled with DMD1.029
More information about the Digitalmars-d-learn
mailing list