probleme mit den ressourcen



  • hallo leute,
    hoffe ich könnt mir weiterhelfen 🙂

    1.frage
    wie kann ich in den ressourcen den titel so bestimmen,
    dass der style 'ws_popup' noch funktioniert?

    #include <windows.h>
    #include "resource.h"
    
    1 DIALOGEX 0, 0, 200, 255
    STYLE DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_VISIBLE
    EXSTYLE WS_EX_TOPMOST
    CAPTION "TITEL"
    
    LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
    FONT 7, "MS SANS SERIF"
    
    BEGIN
        ...
    END
    

    mit 'caption "titel"' konnt dann wieder oben die leiste mit dem namen.

    2. frage
    wie bringe ich bilder in die ressourcen und wie kann ich diese dann benutzen?

    3. frage
    wie bringe ich einen dialog dazu nicht in der taskleiste zu erscheinen

    4.frage
    wie krieg ich das handle eines in den ressourcen erzeugten controls
    (um den text später zu ändern zb

    vielen dank schonmal :), phen



  • 4. antwort
    GetDlgItem(handle des dialogs, id des controls)



  • Phenex schrieb:

    hallo leute,
    hoffe ich könnt mir weiterhelfen 🙂

    3. frage
    wie bringe ich einen dialog dazu nicht in der taskleiste zu erscheinen

    In der Taskleiste werden nur Programme angezeigt.
    Eigentlich ist ein Dialog Teil eines Programms und erscheint daher nicht in der Taskleiste. Außer bei rein dialogbasierten Anwendungen (wobei auch nur das Programm angezeigt wird, nicht die einzelnen Dialoge).

    4.frage
    wie krieg ich das handle eines in den ressourcen erzeugten controls
    (um den text später zu ändern zb

    vielen dank schonmal :), phen

    hDlg = CreateDialog(...)(nicht modal) oder DialogBox(...)(modal).

    Die einzelnen Controls im Dialog haben keine Handles, sondern IDs.



  • nun wie krieg ich dann mein programm^^ dazu das es nicht in der
    tastkleiste angezeigt wird 🙂
    weil iwas is da ja 😉



  • Elektronix schrieb:

    Phenex schrieb:

    hallo leute,
    hoffe ich könnt mir weiterhelfen 🙂

    3. frage
    wie bringe ich einen dialog dazu nicht in der taskleiste zu erscheinen

    In der Taskleiste werden nur Programme angezeigt.
    Eigentlich ist ein Dialog Teil eines Programms und erscheint daher nicht in der Taskleiste. Außer bei rein dialogbasierten Anwendungen (wobei auch nur das Programm angezeigt wird, nicht die einzelnen Dialoge).

    Nein das stimmt (ledier 😉 ) nit...
    Ob ein Fenster (!) in der Taskleiste angezeigt wird, oder nicht hängt nicht vom 'Programm' ab, sondern von den Fenster-Styles bzw von anderen (eher unüblichen) Manipulationen. Ein Dialog erscheint also in der Regel (wenn wir mal von den Standard-Styles ausgehen, everthing can change 😉 ) IMMER in der Taskleiste.
    Um zu deiner Frage und deren Antwort zu kommen:
    Du kannst beispielsweise CreateWindowEx und das Ex-Style WS_EX_TOOLWINDOW nutzen (oder das Flag im Resourcen-Script setzen). Dann erscheint nix inner Taskleiste oder du nimmst folgenden Code:

    // ==> TaskbarTools.h
        //*****************************************************************************
        //*
        //*
        //*     TaskbarTools
        //*
        //*
        //*****************************************************************************
        //
        //  Funktionen für die Steuerung der Taskbar
        //
        //      BOOL    TaskbarHide(HWND Hwnd)      Taste in der Taskbar verstecken
        //      BOOL    TaskbarShow(HWND Hwnd)      Taste in der Taskbar anzeigen
        //
        //  Nachrichten Verarbeitung:
        //
        //      ON_MESSAGE(TB_NOTIFYICON, OnProc)
        //
        //      void OnProc(UINT wParam,UINT lParam)    // lParam ist die ID
        //          {
        //          switch(lParam)
        //              {
        //          case WM_LBUTTONDOWN:
        //          case WM_RBUTTONDOWN:
        //              }
        //          }
    
        #ifndef     __TASKBARTOOLS_H__
        #define     __TASKBARTOOLS_H__
    
        #define     TB_NOTIFYICON       0x2F19
    
        BOOL         TaskbarInit();
        void __cdecl TaskbarExit(void);
    
        BOOL TaskbarHide(HWND Hwnd);
        BOOL TaskbarShow(HWND Hwnd);
    
        #endif
    

    und die Quellcode-Datei:

    // ==> TaskbarTools.cpp
        //*****************************************************************************
        //*
        //*
        //*     TaskbarTools
        //*
        //*
        //*****************************************************************************
        //
        //  Funktionen für die Steuerung der Taskbar
        //
        //      BOOL    TaskbarHide(HWND Hwnd)      Taste in der Taskbar verstecken
        //      BOOL    TaskbarShow(HWND Hwnd)      Taste in der Taskbar anzeigen
        //
    
        #include    <windows.h>
        #include    <shellapi.h>
        #include    <shlwapi.h>
        #include    <shlobj.h>
        #include    <string.h>
        #include    "TaskbarTools.h"
    
        typedef struct ITaskbarListVtbl
            {
            BEGIN_INTERFACE
    
            HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( VOID __RPC_FAR * This,REFIID riid,void __RPC_FAR *__RPC_FAR *ppvObject);
            ULONG   ( STDMETHODCALLTYPE __RPC_FAR *AddRef         )( VOID __RPC_FAR * This);
            ULONG   ( STDMETHODCALLTYPE __RPC_FAR *Release        )( VOID __RPC_FAR * This);
            HRESULT ( STDMETHODCALLTYPE __RPC_FAR *HrInit         )( VOID __RPC_FAR * This);
            HRESULT ( STDMETHODCALLTYPE __RPC_FAR *AddTab         )( VOID __RPC_FAR * This, HWND hwnd);
            HRESULT ( STDMETHODCALLTYPE __RPC_FAR *DeleteTab      )( VOID __RPC_FAR * This, HWND hwnd);
            HRESULT ( STDMETHODCALLTYPE __RPC_FAR *ActivateTab    )( VOID __RPC_FAR * This, HWND hwnd);
            HRESULT ( STDMETHODCALLTYPE __RPC_FAR *SetActiveAlt   )( VOID __RPC_FAR * This, HWND hwnd);
    
            END_INTERFACE
            } ITaskbarListVtbl;
    
        typedef struct
            {
            ITaskbarListVtbl    *lpVtbl;
            }ITaskbarList_;
    
        static  ITaskbarList_   *list=0;
        static  int exit_add=0;
    
        //*****************************************************************************
        //*
        //*     TaskbarInit
        //*
        //*****************************************************************************
        //  Initialisiert die Taskbar Routienen
        //  Ergibt TRUE wenn erfolgreich
        BOOL TaskbarInit()
        {
        HRESULT hr;
    
            if(list)return TRUE;
    
            hr=CoInitialize( NULL );
            if(!SUCCEEDED(hr))return FALSE;
    
            hr=CoCreateInstance(CLSID_TaskbarList,NULL,CLSCTX_INPROC_SERVER,IID_ITaskbarList,(void**)&list);
            if(!SUCCEEDED(hr))return FALSE;
    
        return TRUE;
        }
    
        //*****************************************************************************
        //*
        //*     TaskbarExit
        //*
        //*****************************************************************************
        //  Deinitialisiert die Taskbar Routienen
        void __cdecl TaskbarExit(void )
        {
            if(!list)return;
    
            CoUninitialize();
            list=0;
        }
    
        //*****************************************************************************
        //*
        //*     TaskbarHide
        //*
        //*****************************************************************************
        //  Versteckt die Taskleiste die zu Hwnd gehört
        //  Ergibt TRUE wenn erfolgreich
        BOOL TaskbarHide(HWND Hwnd)
        {
        HRESULT hr;
    
            if(!list)
                {
                if(!TaskbarInit())return FALSE;
                if(!exit_add){atexit(TaskbarExit);exit_add=1;}
                }
    
            hr=list->lpVtbl->DeleteTab(list,Hwnd);
            if(!SUCCEEDED(hr))return FALSE;
    
        return TRUE;
        }
    
        //*****************************************************************************
        //*
        //*     TaskbarShow
        //*
        //*****************************************************************************
        //  Erstellt eine Taste in der Taskleiste die zu Hwnd gehört
        //  Ergibt TRUE wenn erfolgreich
        BOOL TaskbarShow(HWND Hwnd)
        {
        HRESULT hr;
    
            if(!list)
                {
                if(!TaskbarInit())return FALSE;
                if(!exit_add){atexit(TaskbarExit);exit_add=1;}
                }
            hr=list->lpVtbl->AddTab(list,Hwnd);
            hr=list->lpVtbl->ActivateTab(list,Hwnd);
            if(!SUCCEEDED(hr))return FALSE;
    
        return TRUE;
        }
    

    Elektronix schrieb:

    4.frage
    wie krieg ich das handle eines in den ressourcen erzeugten controls
    (um den text später zu ändern zb

    vielen dank schonmal :), phen

    hDlg = CreateDialog(...)(nicht modal) oder DialogBox(...)(modal).

    Die einzelnen Controls im Dialog haben keine Handles, sondern IDs.

    Stimmt auch nit janz...:
    Doch JEDES Fenster hat einen Handle...du bekommst den Handle über die ID und den Handle des Parent-Fensters mit der
    Funktion: GetDlgItem(hParent, uiID);

    EDIT 1: Vertipper
    EDIT 2: Vertipper 😃
    EDIT 3: Quellcode nachgereicht 😉 .



  • Dann zu deinen weiteren Fragen:

    Phenex schrieb:

    1.frage
    wie kann ich in den ressourcen den titel so bestimmen,
    dass der style 'ws_popup' noch funktioniert?

    #include <windows.h>
    #include "resource.h"
    
    1 DIALOGEX 0, 0, 200, 255
    STYLE DS_SETFOREGROUND | DS_CENTER | WS_POPUP | WS_VISIBLE
    EXSTYLE WS_EX_TOPMOST
    CAPTION "TITEL"
    
    LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
    FONT 7, "MS SANS SERIF"
    
    BEGIN
        ...
    END
    

    mit 'caption "titel"' konnt dann wieder oben die leiste mit dem namen.

    Ähm, was willst du denn erreichen ?

    Phenex schrieb:

    2. frage
    wie bringe ich bilder in die ressourcen und wie kann ich diese dann benutzen?

    Hm ich weiß jez nicht welchen Compiler du verwendest...Laden kannst du Resourcen-Bitmaps mit LoadBitmap(...).

    Phenex schrieb:

    3. frage
    wie bringe ich einen dialog dazu nicht in der taskleiste zu erscheinen

    siehe oben 🕶 .

    Phenex schrieb:

    4.frage
    wie krieg ich das handle eines in den ressourcen erzeugten controls
    (um den text später zu ändern zb

    siehe oben 🕶 .

    Cya



  • danke schon mal für die hilfreichen antworten!!!!
    ich möchte erreichen, das das fenster zwar noch einen namen hat, aber oben keine leiste. also das zb in der taskleiste unten noch ein name steht.



  • mein compiler is übrigends mingw in code::blocks



  • @CodeFinder

    Hast ja Recht, hätte ich besser wissen müssen. 😃



  • ich hab jez rausgekriegt, wieso ich immer diese leiste oben angezeigt kriege.
    minGW fügt automatisch WS_CAPTION dazu wenn man CAPTION "..." angitb,
    kann man das iwie ausstellen??



  • Phen.ex schrieb:

    kann man das iwie ausstellen??

    Ich wüsste nur ne indirekte Variante:

    if(GetWindowLongPtr(hWnd, GWL_STYLE) & WS_CAPTION) // Zur Prüfung, ob das Flag auch wirklich enthalten ist
        SetWindowLongPtr(hWnd, GetWindowLongPtr(hWnd, GWL_STYLE) &  WS_CAPTION);
    


  • Phen.ex schrieb:

    ich hab jez rausgekriegt, wieso ich immer diese leiste oben angezeigt kriege.
    minGW fügt automatisch WS_CAPTION dazu wenn man CAPTION "..." angitb,
    kann man das iwie ausstellen??

    Im Notfall kannst Du die .rc-Datei mit einem Texteditor (auch in der IDE) bearbeiten und WS_POPUP oder WS_CAPTION selbst einfügen.


Anmelden zum Antworten