Dialogbox ohne Hauptfenster ?



  • // winChat.cpp : Definiert den Einsprungpunkt für die Anwendung.
    //
    
    #include "stdafx.h"
    #include "resource.h"
    
    BOOL CALLBACK DlgProc (HWND, UINT, WPARAM, LPARAM);
    
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow )
    {
     	// ZU ERLEDIGEN: Fügen Sie hier den Code ein.
    
    	DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),0,DlgProc);
    }
    
    BOOL CALLBACK DlgProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	switch(message)
    	{
    		case WM_INITDIALOG:
    			return TRUE;
    
    		case WM_COMMAND:
    			switch(LOWORD(wParam))
    			{
    				case IDOK:
    					return true;
    			}
    			break;
    	}
    	return FALSE;
    }
    

    so versuche ich eine dialogbox ohne hauptfenster zu öffnen...klappt nicht 😕

    hat jmd nen tipp?



  • Öffnet der mit dem Code überhaupt irgendetwas? Sieht mir nähmlich etwas seltsam aus, kann mich aber auch gut irren.



  • Probiers mal so

    [cpp]
    // Nicht vergessen Header & Libery
    #include <windows.h>
    #include <commctrl.h>
    
    /* Bei Visual studio Libery-Files */
    #pragma comment(lib,"Comctl32.lib")
    
    HINSTANCE	 hInst;
    HWND hWnd;
    
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
    
    	InitCommonControls();
    
    	hInst = hInstance;
    
    	DialogBox(hInst, (LPCTSTR)IDD_DIALOG1, 0, (DLGPROC)DlgProc);
    
    	MSG msg;
    
    	while(GetMessage(&msg,0,0,NULL))
    	{
    		TranslateMessage(&msg);
    		DispatchMessage(&msg);
    	}
    	return msg.wParam;
    
    }
    [/cpp]
    


  • BOOL CALLBACK DialogProc (HWND, UINT, WPARAM, LPARAM);
    
    // WinMain mit Dialogaufruf
    
    int  WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
                        LPSTR lpCmdLine, int nCmdShow)
    {
       return  DialogBox (hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc);
    }// Die Nachrichtenschleife des Dialoges.
    
    // Ein Dialog bekommt statt WM_CREATE ein WM_INITDIALOG!
    BOOL CALLBACK DialogProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
       switch(message)
       {
          case  WM_INITDIALOG:
             return  TRUE;// Zum Beenden
    
          case  WM_CLOSE:
             EndDialog(hDlg,0);
             return  TRUE;// Hier mal die 2 Buttons abfragen ("Ok" und "Abbrechen")
    
          case  WM_COMMAND:
             switch(LOWORD(wParam))
             {
             case  IDCANCEL:
               EndDialog(hDlg,0);
                return  TRUE;
    
             case  IDOK:
                Beep (1000,1000);
                return  TRUE;
             default:
                break;
             }
             return  FALSE;
       }
       return  FALSE;
    }
    


  • danke ich habs hinbekommen!
    jetzt bräuchte ich nurnoch nen tipp, wie ich das icon der exe und das icon vom dialog setze 🙂
    danke!

    edit: ok das programmicon hab ich...jetzt brauch ich nurnoch das icon in der systemleiste im programm



  • [code]
    //Globales handle Setzen
    HICON hIcon = NULL;
    
    //.. anderer Code
    case WM_INITDIALOG:
    {
      // Icon Aus resource laden
      hIcon = (HICON)LoadImage(hInst,MAKEINTRESOURCE(IDI_MAIN_ICON),IMAGE_ICON, 16, 16, LR_SHARED);
      // ICON setzen
      SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM) hIcon);
    }
    return TRUE;
    
    [/code]
    


  • ja aber das setzt nicht das icon in der systemleiste vom dialogfenster! (links neben dem fenstertitel)



  • Doch tut es.



  • LOL, @pixartist, Du darfst Dir ruhig helfen lassen^^.
    PS: Vergiss nicht, das Icon wieder zu löschen; DestroyIcon.



  • http://www.pixartist.de/pchat.jpg
    nein tut es nicht

    BOOL CALLBACK DlgProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	switch(message)
    	{
    		case WM_INITDIALOG: 
    		//[...]
                SendMessage(hDlg,WM_SETICON,ICON_SMALL,(LPARAM)IDI_ICON1);
    		SendMessage(hDlg,WM_SETICON,ICON_BIG,(LPARAM)IDI_ICON1);
                //[...]
           }
    }
    


  • Welchen Wert hat "IDI_ICON1" ? Gibt es noch weitere Icons ?



  • das ist ne resource..und nein es gibt keine anderen icons
    definiert in der resource.h

    #define IDI_ICON1                       110
    

    ich weis aber nicht, wofür das wichtig sein sollte, da das icon offensichtlich funktioniert (.exe icon, startleisten icon)
    nur wird halt das icon in der dialogbox nicht verändert 😡



  • Und wo Hast du das icon Geladen



  • Warum ladest du das icon net so wie ichs dir gezeigt hab und warum machst du den selben aufruf zweimal

    BOOL CALLBACK DlgProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	switch(message)
    	{
    		case WM_INITDIALOG: 
    		//[...]
                SendMessage(hDlg,WM_SETICON,ICON_SMALL,(LPARAM)IDI_ICON1);
    		SendMessage(hDlg,WM_SETICON,ICON_BIG,(LPARAM)IDI_ICON1);
                //[...]
           }
    }
    

    Das gehört sich numal so

    [code]
    hIcon = (HICON)LoadImage(hInst,MAKEINTRESOURCE(IDI_MAIN_ICON),IMAGE_ICON, 16, 16, LR_SHARED);
      // ICON setzen
      SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM) hIcon);
    [/code]
    

    😃 @Codefinder sorry habs vergessen

    case WM_DESTROY: // Fenster Zerstoeren
    DestroyIcon(hIcon);
    PostQuitMessage(0);
    break;
    


  • Ascharan schrieb:

    Warum ladest du das icon net so wie ichs dir gezeigt hab und warum machst du den selben aufruf zweimal

    BOOL CALLBACK DlgProc (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	switch(message)
    	{
    		case WM_INITDIALOG: 
    		//[...]
                SendMessage(hDlg,WM_SETICON,ICON_SMALL,(LPARAM)IDI_ICON1);
    		SendMessage(hDlg,WM_SETICON,ICON_BIG,(LPARAM)IDI_ICON1);
                //[...]
           }
    }
    

    Das gehört sich numal so

    [code]
    hIcon = (HICON)LoadImage(hInst,MAKEINTRESOURCE(IDI_MAIN_ICON),IMAGE_ICON, 16, 16, LR_SHARED);
      // ICON setzen
      SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM) hIcon);
    [/code]
    

    😃 @Codefinder sorry habs vergessen

    case WM_DESTROY: // Fenster Zerstoeren
    DestroyIcon(hIcon);
    PostQuitMessage(0);
    break;
    

    das ist nicht der gleiche aufruf 2 mal...einmal icon_big, einmal icon_small.
    Des weiteren, dein code macht keinen unterschied zu meinem, ausser dass du loadimage benutzt...warum kompliziert, wenns auch einfach geht?



  • möcht mal wissen was du für probleme hast Das erste icon was du einbindest wird in die exe gesetzt wenn ich mich da net vertue du kannst meine grössen Angaben weglassen trotzdessen must du eben erst mal das icon mit MAKEINTRESOURCE(IDI_ICON) erstmal aus deiner resource Laden um es verwenden zu können wenn du das in Pur WinApi machst bsp. wenn du das fenster komplett Zeichnest brauchst du auch erst MAKEINTRESOURCE(IDI_ICON) um ein eigenes icon zu laden

    bei mir siehts so aus Hier

    übrigens ich lade mein icon mit LoadImage weil man es mir so gezeigt hat

    hIcon = (HICON)LoadImage(hInst,MAKEINTRESOURCE(IDI_MAIN_ICON),IMAGE_ICON, 16, 16, LR_SHARED);
    

    damit lade ich das icon 16 x 16 px für die obere linke ecke

    😃



  • oO aber warum gehts denn mit loadimage und nicht so 😞



  • Würd mal behaupten das du nur die ID von deinem Icon Lädst und mit LoadImage Den Interpreter sagst das du ein ICON aus einer Resource laden willst bsp. ein icon aus einem verzeichnis, und MAKEINTRESOURCE aus der programm eigenen resource oder so. 😃



  • pixartist schrieb:

    das ist ne resource..und nein es gibt keine anderen icons
    definiert in der resource.h

    #define IDI_ICON1                       110
    

    ich weis aber nicht, wofür das wichtig sein sollte, da das icon offensichtlich funktioniert (.exe icon, startleisten icon)
    nur wird halt das icon in der dialogbox nicht verändert 😡

    Das es ne Resource ist, war klar. Es wird immer das Icon angezeigt, was die kleinste ID hat, deswegen hab ich gefragt. Du könntest testweise auchmal für IDI_ICON1 den Wert 101 bzw. 100 setzen (das sind eigentlich die Werte die von der IDE vorgegeben werden). Wobei ich eher nicht glaube, dass es was ändern würde; aber n Versuch isses Wert. (Vergiss nicht das gesamte Projekt zu bereinigen, also alle BuildFiles zu löschen).


Anmelden zum Antworten