Win32 API ->Konsole

elfvyn

Mitglied
Hi erstmal
Also ich Habe eine Win32 Anwendung erstellt und ein Fenster mit Menü und eigenem Icon aufgezogen. So jetzt habe ich aber die Win32 Anwendung durch eine Konsolenanwendung ersetzt(bitte nicht fragen warum.. muss halt so sein). Funktioniert alles soweit, nur mein Menü und mein Icon wird nicht mehr dargestellt. Sind beide durch ein Resourcen-file eingebunden.. Hab auch nach dem compilieren noch mal die ID's gecheckt.. passt aber alles. Compiler sagt auch nichts. Da ich ansonsten nichts veränder habe liegt es ihrgendwie an der Projektumstellung.. aber warum

thx schonmal im vorraus
 
?
Also das Konsolenfenster ist ja trotzdem offen... aber ich starte auch meine Fenster... und die Funktionieren ja auch.. Auch Steuerelemente etc... nur ich bekomme in der linken oberen Ecke nur dieses standart Application icon und Menü gibts garkeins
 
Setzt du das Menü und die Icons per Hand an dein Fenster? Wenn ja, bekommen das HMENU und HICON beim Laden einen gültigen Wert ab?
 
Ok, ich stell mal alles rein:

resource.h
Code:
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by rets.rc
//
#define IDR_MAIN_MENU                   101
#define IDI_ICON1                       102
#define IDI_ICON2                       103
#define IDI_ICON3                       104
...

rets.rc
Code:
...
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//

IDR_MAIN_MENU MENU DISCARDABLE 
BEGIN
    POPUP "&File"
    BEGIN
        MENUITEM SEPARATOR
        MENUITEM "E&xit",                       IDM_WINDOW_CLOSE_ALL
    END
    POPUP "View"
    BEGIN
        MENUITEM "TreeWindow",                  ID_VIEW_TREEWINDOW
    END
END


/////////////////////////////////////////////////////////////////////////////
//
// Icon
//

// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_ICON1               ICON    DISCARDABLE     "ICON.ico"
IDI_ICON2               ICON    DISCARDABLE     "ICONBLAU.ico"
IDI_ICON3               ICON    DISCARDABLE     "ICONGELB.ico"
#endif    // Deutsch (Deutschland) resources
/////////////////////////////////////////////////////////////////////////////
...

mainframe.cpp
Code:
void RegMainFrameWindow()
{
	WNDCLASSEX WndClsEx;

	WndClsEx.cbSize		    = sizeof(WNDCLASSEX);
	WndClsEx.style		    = 0;
	WndClsEx.lpfnWndProc	    = MainFrameWndProc;
	WndClsEx.cbClsExtra	    = 0;
	WndClsEx.cbWndExtra	    = 0;
	WndClsEx.hInstance		    = hInstance;
	WndClsEx.hIcon	             = LoadIcon( GetModuleHandle(NULL),
                                                MAKEINTRESOURCE(IDI_ICON1));
	WndClsEx.hCursor		    = LoadCursor(NULL, IDC_ARROW);
	WndClsEx.hbrBackground	    = (HBRUSH)(COLOR_WINDOW+1);
	WndClsEx.lpszMenuName	    = MAKEINTRESOURCE(IDR_MAIN_MENU);
	WndClsEx.lpszClassName	    = MainFrameClassName;
	WndClsEx.hIconSm		    = (HICON)LoadImage(GetModuleHandle(NULL),
                                             MAKEINTRESOURCE(IDI_ICON1),
                                             IMAGE_ICON, 16, 16, 0);

	RegisterClassEx(&WndClsEx);
}



void CreateMainFrameWindow()
{
hWndMainFrame = CreateWindowEx(0L, 
                               MainFrameClassName,
                               "Wnd",
                               WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_CLIPCHILDREN,
                               DesktopRect.top,
                               DesktopRect.left,
                               DesktopRect.right,
                               DesktopRect.bottom,
                               NULL,
                               NULL,
                               hInstance,
                               NULL);
return;
}
Ich hoffe das ist ausreichend :-)
Also ich habs immer noch nicht raus... und eigentlich will ich auch nicht umsteigen und das ganze mit "CreateMenü" erzeugen.. muss doch auch so gehen!
MFG
 
Ich hab mal ein Testprojekt (Konsole) gebaut, und deine Schnipsel reingetan. Statt deiner Proc habe ich die DefWindowProc benutzt und es funktioniert einwandfrei:

Meine Änderungen:

Statt hinstance habe ich GetModuleHandle( NULL ) eingesetzt, sollte aber eigentlich keinen Unterschied machen.
Die Koordinaten habe ich fest eingegeben, sollte auch keinen Unterschied machen.
Macht deine Proc etwa seltsame Sachen?

Code:
// konsoletest.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//

#include "stdafx.h"
#include "resource.h"

#include <windows.h>


void RegMainFrameWindow()
{

	WNDCLASSEX WndClsEx;

	WndClsEx.cbSize		    = sizeof(WNDCLASSEX);
	WndClsEx.style		    = 0;
	WndClsEx.lpfnWndProc	    = DefWindowProc;//MainFrameWndProc;
	WndClsEx.cbClsExtra	    = 0;
	WndClsEx.cbWndExtra	    = 0;
	WndClsEx.hInstance		    = GetModuleHandle(NULL);
	WndClsEx.hIcon	             = LoadIcon( GetModuleHandle(NULL),
                                                MAKEINTRESOURCE(IDI_ICON1));
	WndClsEx.hCursor		    = LoadCursor(NULL, IDC_ARROW);
	WndClsEx.hbrBackground	    = (HBRUSH)(COLOR_WINDOW+1);
  WndClsEx.lpszMenuName	    = MAKEINTRESOURCE(IDR_MENU1);
	WndClsEx.lpszClassName	    = "Hurz";
	WndClsEx.hIconSm		    = (HICON)LoadImage(GetModuleHandle(NULL),
                                             MAKEINTRESOURCE(IDI_ICON1),
                                             IMAGE_ICON, 16, 16, 0);

	RegisterClassEx(&WndClsEx);
}



void CreateMainFrameWindow()
{
  HWND hWndMainFrame = CreateWindowEx(0L, 
                                "Hurz",
                                "Wnd",
                                WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_CLIPCHILDREN,
                                0,
                                0,
                                200,
                                200,
                                NULL,
                                NULL,
                                GetModuleHandle(NULL),
                                NULL);

  ShowWindow( hWndMainFrame, SW_SHOW );
  return;
}



int _tmain(int argc, _TCHAR* argv[])
{

  RegMainFrameWindow();
  CreateMainFrameWindow();

  MSG   msg;

  while ( GetMessage( &msg, 0, 0, 0 ) )
  {
    TranslateMessage( &msg );
    DispatchMessage( &msg );
  }
	return 0;

}
 
hmm.. nee eigentlich nicht.. es funktioniert alles einwandfrei bis auf das besagte problem.. komisch.... danke fürs ausprobieren
 
Also ich habe jetzt noch mal deinen Schritt wiederholt und es geht ja(also in einem neuen Projekt).. aber ich seh den Unterschied nicht..... ich hab jetzt in meinem Projekt alles bis auf das Mainframefenster rausgenommen und hab trotzdem noch kein icon oder menü.. naja thx ich schau mal weiter
 
Step mit dem Debugger durch, und prüf mal, ob das Laden des Icons funktioniert. Stell sicher, dass du das .rc-File auch includet hast (blöder Fehler, aber ist mir auch schon passiert)
 
Zurück