Einzelne Steuerelemente auf Desktop



  • Kannste nicht mal nen Beispiel-Code posten ?



  • Denkste, ich setz mich jetzt daran für dich?! Ich hab auch noch andere Sachens zu tun!



  • 🙂



  • Na gut. Aber nur für dich. 😉

    #include <windows.h>
    //---------------------------------------------------------------------------
    
    // Global Variables
    HWND       g_hEdit;
    HWND       g_hParent;
    FARPROC    g_OldWndProc;
    //---------------------------------------------------------------------------
    
    // Function Prototypes
    HWND              FindListView32();
    LRESULT CALLBACK  NewWndProc(HWND, UINT, WPARAM, LPARAM);
    //---------------------------------------------------------------------------
    //---------------------------------------------------------------------------
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, int)
    {
         g_hParent = FindListView32();
         if(!g_hParent)
            return -1;
    
         // Create Edit
         LONG style = WS_VISIBLE|WS_CHILD;
         LONG ex_style = WS_EX_CLIENTEDGE;
         g_hEdit = CreateWindowEx(ex_style, "EDIT", NULL, style,
                                  100, 400, 180, 21,
                                  g_hParent, NULL, hInstance, NULL);
         SendMessage(g_hEdit, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), MAKELPARAM(TRUE, 0));
    
         // Subclass Edit
         g_OldWndProc = (FARPROC)GetWindowLong(g_hEdit, GWL_WNDPROC);
         SetWindowLong(g_hEdit, GWL_WNDPROC, (LONG)NewWndProc);
    
         // Message Loop
         MSG msg;
         while(GetMessage(&msg, NULL, 0, 0))
         {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
         }
         return msg.wParam;
    }
    //---------------------------------------------------------------------------
    
    LRESULT CALLBACK NewWndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
    {
       switch(iMsg)
       {
          case WM_KEYUP:
             if((int)wParam == VK_RETURN)
                SendMessage(g_hEdit, WM_CLOSE, 0, 0);
             break;
    
          case WM_DESTROY:
             PostQuitMessage(0);
             break;
       }
       return CallWindowProc(g_OldWndProc, hwnd, iMsg, wParam, lParam);
    }
    //---------------------------------------------------------------------------
    
    HWND FindListView32()
    {
         HWND hwnd = FindWindow(NULL, "Program Manager");
         if(hwnd)
         {
            hwnd = FindWindowEx(hwnd, NULL, "SHELLDLL_DefView", "");
            if(hwnd)
               hwnd = FindWindowEx(hwnd, NULL, "SysListView32", "");
         }
         return hwnd;
    }
    

    Müsste man sicher noch was dran rummodeln. Aber so in der Art halt.

    [ Dieser Beitrag wurde am 09.01.2003 um 01:37 Uhr von WebFritzi editiert. ]



  • Ich find meins sogar besser als MagiCs, da' erstens besser aussieht (;)) und man zweitens auch was reinschreiben kann. Ein dritter Punkt ist, dass das Edit nich vor allen Fenstern im Vordergrund steht. Und: Es hat keinen Button in der Taskleiste.



  • Deine Idee ist auch besser..., danke



  • Hallo,

    nochmal dieser lange Thread aber eine Frage noch, insbesondere an WebFritzi.
    Ich kann nach der Sub-Classing-Methode ja auch einen PUSHBUTTON auf das Desktop zaubern, nur weiss ich nicht wie und wo ich die WM_COMMAND-Messages von diesem abfange. Vielleicht mit PeekMessage ? Ick wees nich mer weider...



  • @WebFritzi: Bei mir kann man auch was reinschreiben und ein Button in der Taskleiste erscheint auch nicht!

    cya 🙂



  • Original erstellt von MagiC Creator:
    @WebFritzi: Bei mir kann man auch was reinschreiben und ein Button in der Taskleiste erscheint auch nicht!

    Doch, bei mir schon. Und reinschreiben kann man auch erst, wenn man diesen Button einmal angeklickt hat. Noch ein Nachteil ist, dass sich das Ding bei Aktivierung über alles rübermalt. Hab Win98 - nur zur Info. Kann sein, dass es auf XP anders ist.



  • @BigFusel: Die WM_COMMAND wird doch an das Parent versendet. Die Message kannst du also nicht empfangen, außer du schreibst dir einen Hook, aber dann wäre das SubClassen eh fürn A-rsch. Reagiere lieber auf WM_LBUTTONUP und teste, ob sich der MouseCursor auch über dem Button befindet.



  • mmmmhh, muss ich ma schaun ... 😉


Anmelden zum Antworten