SendDlgItemMessage für "Wnd" ?



  • hallo leutz!

    habe hier eine kleine frage: gibt es eine funktion für normale fenster, die der SendDlgItemMessage() funktion entspricht? Oder könnte ich sonstwie buttons und editboxen mithilfe des IDentifiers ansprechen, anstatt mit handles zu jonglieren? falls nicht: auch nich schlimm, schmeis ich halt die handles rüber, aber vielleicht gibt es eine bequemere ID-variante?

    thx im voraus!
    mfg andrey



  • bequeme id variante*hust*naja...ich kann ids nicht leiden aber egal...

    HWND hMain = CreateWindow = (...);
    #definde BUTTON_ID_1 hMain
    


  • ?

    ich glaube, das problem ist nicht so ganz klar geworden...
    ich hab zwei komplett getrennte klassen, eine ist fürs erstellen der benutzeroberfläche verantwortlich (Main: macht fenster uf, klebt buttons druf), die andere beschäftigt sich damit, alles mögliche zu initialisieren, herunterzufahren, und auf benutzereingaben zu reagieren (Core: hat n HWND-handle von dem hauptfenster, das in der Main erstellt wurde, und will jetzt nur mithilfe des hauptfenster-handles und der button-Identifier text in den child-buttons verändern) Von den handles, die in der WinMain verwendet wurden, hat das Core nie was gehört. Die sind dadrin nicht ma deklariert, deswegen würde ich da mit der textersetzung nicht wirklich weiterkommen... Aber die ID der buttons sind alle global deklariert.

    #define MY_BUTTON_ID 10999
    
    //in der winmain
    
    HWND hButton=CreateWindow("BUTTON",              //<---das gibts nur in WinMain
    		        "Hallo, ich button!",
    			WS_VISIBLE|WS_CHILD,
    			500, 500,
    			200,200,
    			hWnd,                 //<---den handle haben alle
    			(HMENU)MY_BUTTON_ID,  //<---das ist global!!!
    		         hInstance,
    			NULL);
    

    ich will jetzt: von aussen, nur mithilfe des hauptfenster-handles "hWnd" und der button-identifier "MY_BUTTON_ID" dem button irgendwelche messages schicken, analog zu der SendDlgItemMessage:

    SendDlgItemMessage(
      HWND hDlg,      // handle of dialog box
      int nIDDlgItem, // identifier of control
      UINT Msg,       // message to send
      WPARAM wParam,  // first message parameter
      LPARAM lParam );
    

    genau dasselbe für ein normales Window (nicht Dialog) haben

    //nicht funzender text aus meiner träume:
    SendWndItemMessage(
      HWND hWnd,      // handle of window
      int nIDDlgItem, // identifier of control
      UINT Msg,       // message to send
      WPARAM wParam,  // first message parameter
      LPARAM lParam );
    

    Die funktion gibts aber nicht. Was nehme ich anstattdessen?

    (so logisch und übersichtlich die namensgebung bei der winapi ist, kann diese funktion auch WindowItemPostMessage() oder SendItemMessage() oder auch ItemSendMessage() heissen 😮 )

    hoffe, dass jetzt mein problem klargeworden ist...



  • Hi!

    Wenn ich das richtig verstanden habe, suchst du eine Funktion analog zur SendDlgItemMessage, halt für Fenster und nicht für Dialoge?
    Bei mir hat genau diese Funktion bisher aber auch immer für Fenster funktioniert. Genauso, wie GetDlgItem und SetDlgItemText. Probiers mal aus!

    ➡ Müsste also gehen.



  • MSDN zu GetDlgItem schrieb:

    You can use the GetDlgItem function with any parent-child window pair, not just with dialog boxes. As long as the hDlg parameter specifies a parent window and the child window has a unique identifier (as specified by the hMenu parameter in the CreateWindow or CreateWindowEx function that created the child window), GetDlgItem returns a valid handle to the child window.

    Also, damit du gut schlafen kannst: So sollte es gehen:

    inline long SendWndItemMessage(HWND hWnd, int nIDDlgItem, UINT uiMsg, WPARAM wParam, LPARAM lParam)
    {
       return (SendMessage(GetDlgItem(hWnd, nIDDlgItem), uiMsg, wParam, lParam);
    }
    


  • oookay, danke sehr leute... alles klar, problem gelöst, aber...
    ...
    ...
    o mein gott, nach welchem prinzip sind die leute vorgegangen, als sie die namen für die funktionen festgelegt haben??? Das macht doch gar keinen sinn, wie soll ein normalsterblicher denn darauf kommen, dass GetDlgItem auch bei fenstern funzt? Wenn es alles "GetWndItem" heissen würde, wärs ja noch okay, weil jeder dialog auch ein fenster ist, aber doch nicht jedes fenster ist ein dialog! 😮 😮 😮 😮 😮

    ne, jezt sagt nicht, dass ihr das voll okay findet! 😞

    ach wie auch immer...
    winapi-bekäpfungsmaßnahmen zeigten erfolg, problem gelöst...

    danke an alle nochma


Log in to reply