Win32API Window and Tango
Zarathustra
adam.chrapkowski at gmail.com
Wed Aug 27 08:07:27 PDT 2008
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
More information about the Digitalmars-d-learn
mailing list