Toolbarbutton geht zu deaktivieren aber nicht zum aktivieren
-
Hallo, ich hab bei Start des Programms mit
PostMessage(GetDlgItem((HWND) hWnd, IDR_TOOLBAR1), TB_SETSTATE, IDC_STOPBUTTON,MAKELONG(TBSTATE_INDETERMINATE ,0) );das Icon IDC_STOPBUTTON "gegraut".
Später will ich es wieder mit
PostMessage(GetDlgItem((HWND) hWnd, IDR_TOOLBAR1), TB_SETSTATE, IDC_STOPBUTTON,MAKELONG(TBSTATE_ENABLED ,0) );aktivieren.
Problem: deaktivieren geht; aktivieren nachher nicht mehr.
Steh ich da auf da Leitung oder is da irgendwas merkwürdig?? -
-
Ist das Handle der Toolbar dort auch noch richtig?!
-
Ja du hast recht, das Handle ist dort nicht mehr richtig. Aber wieso kann ich mir das Handel nicht mit GetDialogItem holen?
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { ... static HWND hToolBar = NULL; ... case WM_CREATE: { hToolBar=CreateToolBar(hInst,hWnd, IDR_TOOLBAR1,5,15, WS_CHILD|WS_BORDER|WS_VISIBLE); ...Ich hab das Handle in der Fensterprozedur beim erstellen der Toolbar global (für die Fensterprozedur, nicht fürs ganze Prog)gespeichert. Später starte ich einen Thread der unter anderem die Buttons der Toolbar aktivieren soll
_beginthread(StartZeugs,0, hWnd);Da das Handle hToolBar im Thread nicht vorhanden ist will ich es über IDR_TOOLBAR1 mit GetDlgItem((HWND) hWnd, IDR_TOOLBAR1) holen, das geht aber nicht. Warum? Denn GetDlgItem((HWND) hWnd,IDC_EDIT4 funktioniert im gleichem Thread. Verstehe nicht warum dann GetDlgItem((HWND) hWnd, IDR_TOOLBAR1) nicht geht.
-
ewitt7u0 schrieb:
Da das Handle hToolBar im Thread nicht vorhanden ist will ich es über IDR_TOOLBAR1 mit GetDlgItem((HWND) hWnd, IDR_TOOLBAR1) holen, das geht aber nicht. Warum? Denn GetDlgItem((HWND) hWnd,IDC_EDIT4 funktioniert im gleichem Thread. Verstehe nicht warum dann GetDlgItem((HWND) hWnd, IDR_TOOLBAR1) nicht geht.
Das ist wirklich komisch, dass es das eine Mal geht, bei der Toolbar aber nicht. Aber dein hWnd stimmt zu diesem Zeitpunkt noch - also hast du die zwei GetDlgItem an der selben Stelle im Code stehen, oder überschreibst du evtl. im Thread irgendwo ein hWnd

-
es kommt noch dicker:
Ich habe folgendes in meiner Fensterprozedur versucht:... case WM_CREATE: { hToolBar=CreateToolBar(hInst,hWnd,IDR_TOOLBAR1,5,15, WS_CHILD|WS_BORDER|WS_VISIBLE); SendMessage(hToolBar, TB_SETSTATE, IDC_GETALLBUTTON, MAKELONG(TBSTATE_INDETERMINATE ,0) ); SendMessage(hToolBar, TB_SETSTATE, IDC_STARTBUTTON,MAKELONG(TBSTATE_INDETERMINATE ,0) ); SendMessage(hToolBar, TB_SETSTATE, IDC_STOPBUTTON,MAKELONG(TBSTATE_INDETERMINATE ,0) ); SendMessage(GetDlgItem(hWnd, IDR_TOOLBAR1), TB_SETSTATE, IDC_STARTBUTTON,MAKELONG(TBSTATE_ENABLED ,0) ); .......und der Startbutton ist am Ende nicht enabled. Welche Gründe kann es geben dass GetDlgItem nicht geht. Ich hab mal GetDlgItem(hWnd, IDR_TOOLBAR1), überwacht und er meint dass er das Symbol IDR_TOOLBAR1 nicht findet. Komisch in der resource.h is es aber definiert
#define IDR_TOOLBAR1 129

... achja und die Toolbar wird expliziet so erstellt:
HWND hWndToolBar = CreateWindowEx(0,TOOLBARCLASSNAME,0,dwStyle,x,y,cx,cy,hWnd,(HMENU) uResId,hInst,0);uResId ist das was ich bei CreateToolBar als IDR_TOOLBAR1 übergeben hab
-
... jetzt gehts; wirklich sehr merkwürdig ...
Mir hats gereicht und war mitm Latein am Ende deshalb hab ich das Projekt gelöscht und ein neues Projekt erstellt und die nötigen Dateien reinkopiert. (VSTUDIO 6) - siehe da es geht wie von Geisterhand
Das ist eigentlich das erste mal das ich das Problem nicht bei mir fand sondern es anscheinend wirklich irgendein Prob. mit dem VS6 gab...
