CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 4 of 4
  1. #1
    Join Date
    May 2011
    Posts
    1

    Problem with Common Controls

    Hey,

    I want to give my applications the modern look of windows. I tried manifest files and c++ functions but when I use one of them the window does not show my button at all.

    Here is the code:
    Code:
    #pragma comment( lib, "ComCtl32.lib" )
    
    #define UNICODE
    
    #include <Windows.h>
    #include <CommCtrl.h>
    
    InitCommonControls( );
    
    CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "12_child_windows.manifest"
    
    LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam );
    int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iShowingMode );
    
    HINSTANCE hPublicInstance;
    
    int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iShowingMode )
    {
    	HWND		hWnd;
    	MSG			msg;
    	WNDCLASSW	wndClass;
    
    	hPublicInstance = hInstance;
    
    	wndClass.cbClsExtra		= 0;
    	wndClass.cbWndExtra		= 0;
    	wndClass.hbrBackground	= (HBRUSH) GetStockObject( WHITE_BRUSH );
    	wndClass.hCursor		= LoadCursor( NULL, IDC_ARROW );
    	wndClass.hIcon			= LoadIcon  ( NULL, IDI_WINLOGO );
    	wndClass.hInstance		= hInstance;
    	wndClass.lpfnWndProc	= WndProc;
    	wndClass.lpszClassName	= L"Child Window";
    	wndClass.lpszMenuName	= NULL;
    	wndClass.style			= CS_VREDRAW | CS_HREDRAW;
    
    	if( !RegisterClassW( &wndClass ) )
    	{
    		MessageBoxW( NULL, L"The program could not start!", L"Error", MB_OK );
    		return -1;
    	}
    
    	hWnd = CreateWindow(	L"Child Window",
    							L"Child Windows",
    							WS_OVERLAPPEDWINDOW,
    							CW_USEDEFAULT,
    							CW_USEDEFAULT,
    							CW_USEDEFAULT,
    							CW_USEDEFAULT,
    							NULL,
    							NULL,
    							hInstance,
    							NULL
    						);
    
    	ShowWindow  ( hWnd, iShowingMode );
    	UpdateWindow( hWnd );
    
    	while( GetMessageW( &msg, NULL, 0, 0 ) )
    	{
    		TranslateMessage( &msg );
    		DispatchMessage ( &msg );
    	}
    
    	return msg.lParam;
    }
    
    LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
    {
    
    	static HWND		hWndChild;
    	switch( msg )
    	{
    	case WM_CREATE:
    
    		hWndChild = CreateWindow(	L"Button",
    									L"Button",
    									WS_CHILDWINDOW | WS_VISIBLE | BS_PUSHBUTTON,
    									10,
    									10,
    									50,
    									50,
    									hWnd,
    									NULL,
    									hPublicInstance,
    									NULL
    								);
    
    		return 0;
    		break;
    
    
    	case WM_DESTROY:
    
    		PostQuitMessage( 0 );
    
    		break;
    
    	}
    
    	return DefWindowProcW( hWnd, msg, wParam, lParam );
    }
    And here are the errors I get:
    Code:
    ------ Build started: Project: 12_child_windows, Configuration: Debug Win32 ------
      main.cpp
    c:\c++\12_child_windows\12_child_windows\main.cpp(8): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    c:\c++\12_child_windows\12_child_windows\main.cpp(8): error C2556: 'int InitCommonControls(void)' : overloaded function differs only by return type from 'void InitCommonControls(void)'
              c:\program files\microsoft sdks\windows\v7.0a\include\commctrl.h(135) : see declaration of 'InitCommonControls'
    c:\c++\12_child_windows\12_child_windows\main.cpp(8): error C2373: 'InitCommonControls' : redefinition; different type modifiers
              c:\program files\microsoft sdks\windows\v7.0a\include\commctrl.h(135) : see declaration of 'InitCommonControls'
    c:\c++\12_child_windows\12_child_windows\main.cpp(10): error C2226: syntax error : unexpected type 'LPWSTR'
    c:\c++\12_child_windows\12_child_windows\main.cpp(31): error C2065: 'WndProc' : undeclared identifier
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
    Does anybody know what I am doing wrong?

    (I am using Visual Studio 2010)

    Niklas

  2. #2
    Join Date
    Apr 2009
    Posts
    598

    Re: Problem with Common Controls

    The first problem I see is that your line
    Code:
    InitCommonControls( );
    should be in a function. Here it is hanging in cyberspace and will never be called.
    For instance, call that function when your window is created, e.g. after WM_CREATE
    Code:
     case WM_CREATE:
        InitCommonControls( );

  3. #3
    Join Date
    Jun 2011
    Posts
    3

    Re: Problem with Common Controls

    Quote Originally Posted by olivthill2 View Post
    For instance, call that function when your window is created, e.g. after WM_CREATE
    I would recommend calling InitCommonControls() before any windows are created or window classes registered, i.e. as the first line in WinMain:

    Code:
    int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iShowingMode )
    {
    	HWND		hWnd;
    	MSG			msg;
    	WNDCLASSW	wndClass;
    
    	InitCommonControls();

  4. #4
    Join Date
    Jun 2011
    Posts
    3

    Re: Problem with Common Controls

    I've just noticed another problem. The line:

    Code:
    CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "12_child_windows.manifest"
    ...should be in a resource script file (*.rc), not in a C/C++ module. That line will not only have no effect, I would expect it would also produce a compiler error.

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured