【问题标题】:Library for making Win32 windows?用于制作 Win32 窗口的库?
【发布时间】:2010-11-01 19:00:22
【问题描述】:

我想尝试一些 D3D 编程,但我讨厌编写代码来创建和管理 Win32 窗口。我真的不喜欢原生的 Win32 API。是否有任何库或帮助类可以更轻松地创建和管理 Win32 窗口对象?

谢谢

【问题讨论】:

  • 你的应用有多复杂?你需要一个窗口,多个窗口?一个带控件的窗口?
  • 基本上,我只需要一个窗口就可以进行 DirectX 渲染。

标签: directx winapi


【解决方案1】:

您实际上需要处理的 Win32 窗口很少。

你可以试试这个,例如:

ATOM MyRegisterClass( HINSTANCE hInstance, TCHAR* szWindowClass );
HWND InitInstance(HINSTANCE hInstance, int nCmdShow, TCHAR* szWindowClass, TCHAR* szTitle, int width, int height );

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
    // TODO: Place code here.
    HACCEL hAccelTable;

    // Initialize global strings
    MyRegisterClass( hInstance, _T( "MyWinClass" ) );

    // Perform application initialization:
        HWND hWnd = InitInstance (hInstance, SW_SHOWDEFAULT, _T( "MyWinClass" ), _T( "D3D Renderer" ), 1024, 768 );
    if ( hWnd == NULL ) 
    {
        return FALSE;
    }

    // INIT D3D!
    // INIT D3D!
    // INIT D3D!


    MSG msg;
    msg.message = 0;
    // Main message loop:
    while( msg.message != WM_QUIT ) 
    {
        // DO D3D RENDERING!
        // DO D3D RENDERING!
        // DO D3D RENDERING!

        if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
        {
            TranslateMessage( &msg );
            DispatchMessage( &msg );
        }
        else
        {
            Sleep( 0 );
        }
    }

    // SHUTDOWN D3D!
    // SHUTDOWN D3D!
    // SHUTDOWN D3D!

    return 0;
}

ATOM MyRegisterClass( HINSTANCE hInstance, TCHAR* szWindowClass )
{
    WNDCLASSEX wcex;

    wcex.cbSize = sizeof(WNDCLASSEX); 

    wcex.style          = CS_CLASSDC;
    wcex.lpfnWndProc    = (WNDPROC)WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;
    wcex.hIcon          = NULL;
    wcex.hCursor        = NULL;
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName   = NULL;
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = NULL;

    return RegisterClassEx(&wcex);
}

HWND InitInstance(HINSTANCE hInstance, int nCmdShow, TCHAR* szWindowClass, TCHAR* szTitle, int width, int height )
{
   hInst = hInstance; // Store instance handle in our global variable

   HWND hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, width, height, NULL, NULL, hInstance, NULL);

   if ( hWnd == NULL )
   {
      return hWnd;
   }

   ShowWindow(ghWnd, nCmdShow);
   UpdateWindow(ghWnd);

   return hWnd;
}

这就是您需要的所有与窗口相关的代码。

【讨论】:

    【解决方案2】:

    你可以看看WTL

    【讨论】:

      【解决方案3】:

      QtwxWidgetsFLTKGTK+ 是一些最明显的可能性。

      【讨论】:

        猜你喜欢
        • 2011-02-22
        • 2010-10-29
        • 1970-01-01
        • 2011-07-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-09
        • 2010-10-01
        • 1970-01-01
        相关资源
        最近更新 更多