Ein Dialog - 3 Fragen: Clipping, externe Variablen und Handle auf Treeitem bekommen...



  • morgen.
    Ich habe mal drei Fragen:
    1)
    Kann ich ein Dialogfenster genau so clippen, wie ein normales Fenster?
    Wie hieße die Nachricht, in der ich es tun soll, WM_CREATE ist es ja bei normalen Fenstern, ist es hier WM_INITDIALOG?

    In einer Datei (a) clippe ich das Hauptfenster und habe in dieser alles für das Hauptfenster, also WndProc, und eine Referenz auf eine andere (z)Datei, in welcher WinMain drin ist.( diese includiert a).
    In einer anderen Datei (b), welche von der oberen (a) inkludiert wird, wird der Dialog erstellt. Diese Dialogdatei enthält alles.
    Ich würde nun gerne in der Dialogprozedur (Datei b)Variablen verwenden können, die in der Datei a erstellt werden. Bei einem include dieser Datei spuckt dev-cpp n Haufen Fehler aus und erzählt am Ende was von wegen "get confused because of repeated definitions". Etwas ist mir das schon klar, aber wie sonst spreche ich diese Variablen an, wenn nicht über ein include ( das Problem an der Sache ist, dass : ( in ein paar Worten)

    Die Datei z, die nur WinMain des Hauptfensters enthält, bindet nur die Datei a ein, die die WndProc des Hauptfensters enthält und diese bindet die Datei b ein, welche die DlgProc und noch ein paar andere Funktionen enthält.
    Und in dieser Datei b brauche ich aber Variablen der Datei a.
    Etwas verwzickt... was tun?

    Kann mir jemand bei diesem code sagen, wieso ich nie ein Handle von dem selektierten TreeItem bekomme?

    // in der DlgProc
    LRESULT CALLBACK DlgProc(HWND hWdlg, UINT hMdlg,dlgM_Wflags,dlgM_Lflags) 
    {
      HTREEITEM sel;
      static TVITEM seli;
    
      switch(hMdlg)
      {
      // 
      // WM_INITDIALOG und andere
    
      // hier der Problemfall   :warning:   :warning:   :warning: 
         case WM_NOTIFY:
         {
           char selname[MAX_PATH];
    
           switch((int)dlgM_Wflags)
           {
               case (ID_DLG_TREE1):
               {
                 switch(((LPNMHDR)dlgM_Lflags)-> code
                 {
                   case (NM_CLICK):
                   {
                      sel = TreeView_GetSelection(htv);
                      if(sel = NULL)
                      {
                        MessageBox(NULL,"No handle","Notify on treeview",MB_OK);
                      }
                      else
                      {
                        MessageBox(NULL,"No handle","Notify on treeview",MB_OK);
                      }
                   }
    
                 }
               }
           }
         }
    
      }
     // und so weiter
    }
    

    Hier bekomme ich einfach kein handle.
    Ich hab den zweiten switch schon auf den lParam->idfrom bezogen., das Ergebnis bleibt das gleiche.
    Und ich komm einfach nicht drauf.
    Wäre sehr dankbar für einen Hinweis.



  • hab den code jetzt nicht getestet, sondern aus dem bauch gemacht sollte aber so funzen. der rest ist mir ein bischen zu verwirrend geschrieben ;).

    für wParam & lParam must du halt deine variablen einsetzen.

    case WM_NOTIFY:
    {
    	switch(LOWORD(wParam))
    	{
    		case ID_DLG_TREE1
    		{
    
    			switch(((LPNMHDR)lParam)->code)
    			{
    				case NM_CLICK: 
    				{ 
    					LPNMTREEVIEW nmtv = (LPNMTREEVIEW)lParam;
    					char szHandle[128];
    
    					if(nmtv->hdr.hwndFrom!=NULL)
    						sprintf(szHandle,"Handle is 0x%x",nmtv->hdr.hwndFrom);
    					else
    						sprintf(szHandle,"No Handle 0x%x",nmtv->hdr.hwndFrom);
    
    					MessageBox(NULL,szHandle,"Notify on treeview",MB_OK); 
    				}
    				break;
    			}
    		}
    		break;
    	}
    }
    break;
    


  • LPNMTREEVIEW ?
    Was ist das?
    Und: Hätteste Lust, nen Dreizeiler Als Kommentar drauf zu antworten?



  • wenn ich richtig informiert bin, ist LP ein LongPoint auf die NMTREEVIEW strucktur die unter diesem namen auch in der MSDN zu finden ist.

    http://msdn2.microsoft.com/en-us/library/aa932730.aspx

    NMTREEVIEW gibt dir für mein verständniss relevante informationen über das angeklickte Element in der Baumansicht zurück. 🙄



  • sorry.
    Aber ich meinte nicht das Treeview handle, sondern das des im Treeview angeclickten Elementes ( Ordners in dem Fall).
    Sieht mir nach dem Handle des Treeviews aus, oder?
    Weil ich immer das gleiche angezeigt bekomme.
    Verdammt , ich hampele schon drei Monate daran rum. Mit großen Pausen.
    Danke bisher.


Log in to reply