Hilfe mit den ToolBars



  • Das hab ich schon durch gelesen, hat mir aber nich direkt was geholfen mit den Bmp's 😞
    Weißt du oder vllt jem. abnders wo ich noch was jutes gezeigt bekomme?



  • Das heißt jetzt ich muss eine Bitmap erstellen sagen wir mal von 160 cx Pixel breit und 16cy Pixel hoch, dann sagen wir einfacht mal in dem Bitmap würde ich dann einfach noch 16 kleine "Icons" reinpacken und das Bitmap dann einfach ins Programm laden und dann hat jedes tb Buttn sein Bild, naja ich hab's jetzt mal mit nem 1616^^ bmp probiert und hat nich gefunkst, hab aber noch nen 430 bmp rumliegen dann versuchst ich mal damit
    ....
    ich komm nich klar 😑

    lg sigint

    **
    Nee funst net, ich lad mal nen screenie hoch**

    edit: screenie
    http://img509.imageshack.us/img509/2839/unbenanntaa5.png



  • Oder zeig mir einfach wie so ne bmp aussehn soll? das könnte mir auch weiterhelfen?

    **
    Hab Code jetzt so, aber es wird immer noch nur ein bitmap angezeigt obwohl ich es so gemacht habe wie du wolltest 😞
    **

    HWND create_tb(HWND hWndParent, HINSTANCE hInst)
    {
    	HWND					hWndTB;
    	TBADDBITMAP				tbab;
    	TBBUTTON				tbb[4];
    	INITCOMMONCONTROLSEX	icex;
    	int						iNumBtns = sizeof(tbb)/sizeof(tbb[0]),
    							i;
    
    	icex.dwSize		= sizeof(INITCOMMONCONTROLSEX);
    	icex.dwICC		= ICC_BAR_CLASSES;
    	InitCommonControlsEx(&icex);
    
    	tbab.hInst	= hInst;
    	tbab.nID	= IDB_BITMAP3;
    
    	hWndTB = CreateWindowEx(0,
    							TOOLBARCLASSNAME,
    							NULL,
    							WS_CHILD,
    							0,0,0,0,
    							hWndParent, (HMENU)ID_TOOLBAR, hInst, NULL);
    	SendMessage(hWndTB, TB_SETBUTTONSIZE, 0, (LPARAM)MAKELONG(16, 16));
    	SendMessage(hWndTB, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
    
    	SendMessage(hWndTB, TB_ADDBITMAP, (WPARAM)iNumBtns, (LPARAM)&tbb);
    	SendMessage(hWndTB, TB_LOADIMAGES, IDB_BITMAP3, (LPARAM)hInst);
    	ZeroMemory(tbb, sizeof(tbb));
    
    	for(i = 0; i < iNumBtns; i++)  {
    		tbb[i].fsState		= TBSTATE_ENABLED;
    		tbb[i].fsStyle		= TBSTYLE_BUTTON;
    		tbb[i].iString		= 0;
    	}
    
    	tbb[0].iBitmap		= 0;
    	tbb[0].idCommand	= IDM_EXIT;
    	tbb[1].iBitmap		= 1;
    	tbb[1].idCommand	= IDM_ABOUT;
    	tbb[2].iBitmap		= 2;
    	tbb[2].idCommand	= 0;
    	tbb[3].iBitmap		= 3;
    	tbb[3].idCommand	= 0;
    
    	SendMessage(hWndTB, TB_ADDBUTTONS, (WPARAM)iNumBtns, (LPARAM)(LPTBBUTTON)&tbb);
    	SendMessage(hWndTB, TB_AUTOSIZE, 0, 0);
    
    	ShowWindow(hWndTB, SW_SHOW);
    
    	return hWndTB;
    }
    


  • Kann mir wirklich keiner helfen?



  • Mußt bis heute Abend warten, dann kann ich in meine Unterlagen schauen.



  • Hi,
    Vielen dank, das ist wirklich sehr nett von dir, danke freu mich schon richtig druff

    🙂 lg c4f



  • Vielleicht hilft dir das ja weiter http://www.codeproject.com/tools/ToolbarEditor.asp
    Das ist ein Toolbar Editor der dir eine Toolbar erstellt.

    MfG schirrmie



  • Naja es is nett gemeint von dir, aber ich möchte das schon mit der Tastatur proggen und keine Tools nehmen um mein Prog zu coden verstehst du? Aber ich probiers mal danke nochmal für jede Hilfe

    lg c4f

    *EDIT: Das Programm funst net, er schreibt beim Programmstart dass er ne .dll nich finden würde 😞



  • Es gibt auch noch einige Varianten zur Lösung.
    Hier ein Tutorial: http://www.functionx.com/win32/Lesson03.htm



  • thx, das wer dich mir mal durchnehmen ;), aber sollte man noch CreateToolbarEx verwenden?



  • Du kannst CreateWindowEx oder CreateToolbarEx nehmen, es geht beides. Der Witz ist nämlich, daß CreateToolbarEx auf CreateWindowEx zurückgreift.

    Hier ist mein Prog mit 4 Schaltflächen in einer Symbolleiste. 3 Schaltflächen sind vordefiniert, die vierte wird in der Funktion Tb_add_button zur Laufzeit eingefügt. Die Ressourcen dazu mußt Du selbst erstellen. :p
    Bei mir funktioniert das Prog. 😃 👍

    #define STRICT
    #include <windows.h>
    #include <commctrl.h>
    #include "Symbolleiste_2.h"//Ressourcen-Header.
    
    const int NumButtons = 3;
    HWND hToolBar;
    void tb_add_button(HWND, int, int, int style);
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
    const char szAppName[] = "Symbolleiste";
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
    {
    	HWND hWnd;
       MSG  msg;
       HMENU hMenu;
       WNDCLASSEX wc;
    
       wc.cbSize			= sizeof(WNDCLASSEX);
       wc.style				= CS_HREDRAW|CS_VREDRAW;
       wc.lpfnWndProc		= WndProc;
       wc.cbClsExtra		= 0;
       wc.cbWndExtra		= 0;
       wc.hInstance		= hInstance;
       wc.hCursor			= LoadCursor(NULL, IDC_CROSS);
       wc.hIcon				= LoadIcon(NULL, IDI_APPLICATION);
       wc.hbrBackground	= (HBRUSH)(COLOR_INACTIVECAPTION);
       wc.lpszClassName	= szAppName;
       wc.lpszMenuName	= NULL;
       wc.hIconSm			= (HICON)LoadImage(GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_ICON1),
       							IMAGE_ICON, 16, 16, 0);
    
       if (RegisterClassEx(&wc) == 0)
       	return 0;
       hMenu = LoadMenu(hInstance, MAKEINTRESOURCE(IDM_MENU1));
       hWnd = CreateWindowEx(NULL,
       								szAppName,
                               szAppName,
                               WS_OVERLAPPEDWINDOW|WS_VISIBLE,
                               CW_USEDEFAULT,
                               CW_USEDEFAULT,
                               400,
                               400,
                               NULL,
                               hMenu,
                               hInstance,
                               NULL);
    
       InitCommonControls ();
       TBBUTTON ToolButton[3];
    
       ToolButton[0].iBitmap 	= 0;
       ToolButton[0].idCommand = IDM_TB_EXIT;
       ToolButton[0].fsState	= TBSTATE_ENABLED;
       ToolButton[0].fsStyle	= TBSTYLE_BUTTON;
       ToolButton[0].dwData		= 0;
       ToolButton[0].iString	= 0;
    
       ToolButton[1].iBitmap 	= 1;
       ToolButton[1].idCommand = IDM_TB_HIDESHOW;
       ToolButton[1].fsState	= TBSTATE_ENABLED;
       ToolButton[1].fsStyle	= TBSTYLE_CHECK;
       ToolButton[1].dwData		= 0;
       ToolButton[1].iString	= 0;
    
       ToolButton[2].iBitmap 	= IDB_BITMAP2;
       ToolButton[2].idCommand = IDM_TB_SHOW;
       ToolButton[2].fsState	= TBSTATE_ENABLED;
       ToolButton[2].fsStyle	= TBSTYLE_BUTTON;
       ToolButton[2].dwData		= 0;
       ToolButton[2].iString	= 0;
    
       hToolBar = CreateToolbarEx(hWnd,
       									WS_VISIBLE|WS_CHILD,3,NumButtons,
                                  hInstance,IDB_BITMAP1,ToolButton, NumButtons, 16,16,16,16,
                                  sizeof(TBBUTTON));
    
       ShowWindow (hWnd, iCmdShow);	//"iCmdShow" legt die Darstellungsform des Fensters fest (z. B.
                                     //minimiert, maximiert, versteck o.ä.. Kann auch mit einer
                                     //Konstanten belegt werden, darf aber nur einmal mit der Übergabe
                                     //iCmdShow belegt werden.
       UpdateWindow (hWnd);				//Fenster neu zeichnen nach Veränderungen.
    	while (GetMessage(&msg, NULL,0,0))	//2. Parameter = hWnd = Handle des Fensters, dessen
       												//Botschaft überprüft werden soll. Wenn hWnd = NULL, werden
                                           //alle Fenster der Anwendung abgefragt.
       {
    		TranslateMessage(&msg);	//Nachrichtenschleife
          DispatchMessage(&msg);
       }
    	return msg.wParam;
    }
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    //WndProc bearbeitet alle Nachrichten, die für diese Fensterklasse bestimmt sind.
    {
       static bool NewButtonState = FALSE;
    
    	switch (message)
       {
       	case WM_COMMAND:
          {
          	switch (LOWORD(wParam))
             {
             	case IDM_FILE_EXIT:
                {
                	DestroyWindow(hwnd);
                	return 0;
                }
    
                case IDM_SYMBOL_HIDE://Menüpunkt (Schalfläche) ausblenden
                {
                	if (!(SendMessage(hToolBar, TB_GETSTATE, IDM_TB_HIDESHOW, 0)==TBSTATE_CHECKED))
                   {
                 		SendMessage(hToolBar, TB_CHECKBUTTON, IDM_TB_HIDESHOW, TRUE);
                   }
                   SendMessage(hToolBar, TB_SETSTATE, IDM_TB_SHOW, TBSTATE_HIDDEN);
                	break;
                }
                case IDM_SYMBOL_SHOW://Menüpunkt (Schalfläche) einblenden
                {
                 	if (SendMessage(hToolBar, TB_GETSTATE, IDM_TB_HIDESHOW, 0)!=TBSTATE_CHECKED)
                   {
                   	SendMessage(hToolBar, TB_CHECKBUTTON, IDM_TB_HIDESHOW, FALSE);
                   }
                   SendMessage(hToolBar, TB_SETSTATE, IDM_TB_SHOW, TBSTATE_ENABLED);
                   break;
                }
                case IDM_TB_HIDESHOW://Schaltfläche drücken// lösen
                {
                	switch (SendMessage(hToolBar, TB_ISBUTTONCHECKED, IDM_TB_HIDESHOW, 0))
                   {  //schon gedrückt/ gelöst?
                    	case TRUE:
                      {  //noch nicht gedrückt: drücken, anderen Knopf ausblenden
                         SendMessage(hToolBar, TB_SETSTATE, IDM_TB_SHOW, TBSTATE_HIDDEN);
                         break;
                      }
                      case FALSE:
                      {  //schon gedrückt: lösen, anderen Knopf einblenden
                         SendMessage(hToolBar, TB_SETSTATE, IDM_TB_SHOW, TBSTATE_ENABLED);
                         break;
                      }
    
                   }
                	break;
                }
                case IDM_TB_EXIT:
                {
                	if(MessageBox(hwnd, "Programm beenden?", "Sicherheitsabfrage", MB_ICONQUESTION|MB_OKCANCEL|MB_DEFBUTTON2)== IDOK)
                   {
                   	DestroyWindow(hwnd);
                   }
                   else
                   	break;
                }
                case IDM_TB_SHOW: //neue Schaltfläche einfügen
                {
    
                   if(NewButtonState==TRUE)
                   {
                   	if(MessageBox(hwnd, "Button soll gelöscht werden?", "Schaltflächeninfo", MB_ICONINFORMATION|MB_OKCANCEL)==IDOK)
                      {
                      	SendMessage(hToolBar, TB_DELETEBUTTON, 3, 0);
                      	NewButtonState = !NewButtonState;
                      	return 0;
                      }
                      break;
                   }
                   if(NewButtonState==FALSE)
                   {
                		tb_add_button(hToolBar, 1, IDB_BITMAP2, TBSTYLE_BUTTON);
                      NewButtonState = !NewButtonState;
                      return 0;;
                   }
                   break;
                }
                case 1:
                {
                 	MessageBox(hwnd, "neue Schaltfläche wurde gedrückt", "Schaltflächeninfo", MB_ICONINFORMATION|MB_OK);
                }
    
             }
             break;
          }
    
       	case WM_DESTROY:
          {
          	PostQuitMessage (0);	//Beendung der Anwendung
             return 0;
          }
       }
       return DefWindowProc(hwnd, message, wParam, lParam); 	//DefaultWindowProcedure, Standardbearbeitung.
    
    }
    ////////////////////////////////////////////////////////////////////////////////////////
    
    void tb_add_button(HWND hToolBar, int command, int bitmap, int style)
    {
    	HBITMAP h_Bitmap;
       h_Bitmap = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(bitmap));
       if (h_Bitmap==NULL)
       {
       	MessageBox(NULL, "kein Bitmap geladen", "Bitmapfehler", MB_ICONEXCLAMATION|MB_OK|MB_DEFBUTTON1);
       }
    
       TBADDBITMAP bitid;
       bitid.hInst = NULL;//nicht GetModuleHandle(NULL)!!! Das nur, wenn die Bitmap
       							//aus einer Datei geladen wird.
       bitid.nID = (UINT)h_Bitmap;
    
       TBBUTTON newbutton;
       newbutton.iBitmap = SendMessage(hToolBar, TB_ADDBITMAP, 1, (long)&bitid);
       newbutton.idCommand = command;
       newbutton.fsState = TBSTATE_ENABLED;
       newbutton.fsStyle = style;
       newbutton.dwData = 0;
       newbutton.iString = NULL;
       SendMessage(hToolBar, TB_ADDBUTTONS, (WPARAM)1, (LPARAM)(LPTBBUTTON)&newbutton);
    }
    

    EDIT: Versteh nicht, warum in den case-Zweigen die IDMs als Links angezeigt werden... 😮 😕



  • danke für die Mühe, sage dir morgen ob's gefunst hat wirklich danke für die Mühe
    lg sigint



  • Nice, es hat gefunst wirklich herzlichen dank, das hat mich wirklich näher gebracht, und noch einen dank an ascharan der mir über icq geholfen hat 😉

    HWND CreateTB(HWND hWndParent, HINSTANCE hInst)
    {
    	static int iNumBtns = 4,
    			   iTBBtnWidth = 16,
    			   iTBBtnHeight = 16,
    			   iTBImgWidht = 16,
    			   iTBImgHeight = 16;
    
    	HWND hWndTB;
    
    	TBBUTTON tbButton[ ] =
    	{
    		{0,   0,	TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0},
    		{1,   0,    TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0},
    		{2,   0,	TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0},
    		{3,   0,	TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0},
    		{0,   0,	TBSTATE_ENABLED, TBSTYLE_SEP,    0, 0, 0},
    	};
    
    	hWndTB = CreateToolbarEx(hWndParent,
    							 WS_CHILD | TBSTYLE_TOOLTIPS | TBSTYLE_FLAT,
    							 0,
    							 iNumBtns,
    							 hInst,
    							 IDB_STANDARD,
    							 tbButton,
    							 sizeof(tbButton)/sizeof(TBBUTTON),
    							 iTBBtnWidth, iTBBtnHeight,
    							 iTBImgWidht, iTBImgHeight,
    							 sizeof(TBBUTTON));
    
    	ShowWindow(hWndTB, SW_SHOW);
    	return hWndTB;
    }
    

    Code stelle ich mal rein für leute die ähnliche Probs haben 😉

    lg c4f


Anmelden zum Antworten