Butten mit IcON



  • Hallo
    Ich hab mal wieder einen Fehler
    ich möcht das ein ICON in meinem Butter ist und wenn man über dem Butten ist soll es sich ändern.

    und ich hab einen Fehler
    ---------------------------------------------------------------
    DialogDlg.cpp
    C:\Programme\Microsoft Visual Studio\MyProjects\Dialog\DialogDlg.cpp(107) : error C2660: 'SetIcon' : Funktion akzeptiert keine 2 Parameter
    Fehler beim Ausführen von cl.exe.

    Dialog.exe - 1 Fehler, 0 Warnung(en)
    -----------------------------------------------------------------

    // DialogDlg.cpp : Implementierungsdatei
    //
    
    #include "stdafx.h"
    #include "Dialog.h"
    #include "DialogDlg.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    
    /////////////////////////////////////////////////////////////////////////////
    // CAboutDlg-Dialogfeld für Anwendungsbefehl "Info"
    
    class CAboutDlg : public CDialog
    {
    public:
    	CAboutDlg();
    
    // Dialogfelddaten
    	//{{AFX_DATA(CAboutDlg)
    	enum { IDD = IDD_ABOUTBOX };
    	//}}AFX_DATA
    
    	// Vom Klassenassistenten generierte Überladungen virtueller Funktionen
    	//{{AFX_VIRTUAL(CAboutDlg)
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung
    	//}}AFX_VIRTUAL
    
    // Implementierung
    protected:
    	//{{AFX_MSG(CAboutDlg)
    	//}}AFX_MSG
    	DECLARE_MESSAGE_MAP()
    };
    
    CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
    {
    	//{{AFX_DATA_INIT(CAboutDlg)
    	//}}AFX_DATA_INIT
    }
    
    void CAboutDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	//{{AFX_DATA_MAP(CAboutDlg)
    	//}}AFX_DATA_MAP
    }
    
    BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
    	//{{AFX_MSG_MAP(CAboutDlg)
    		// Keine Nachrichten-Handler
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    /////////////////////////////////////////////////////////////////////////////
    // CDialogDlg Dialogfeld
    
    CDialogDlg::CDialogDlg(CWnd* pParent /*=NULL*/)
    	: CDialog(CDialogDlg::IDD, pParent)
    {
    	//{{AFX_DATA_INIT(CDialogDlg)
    	m_sResults = _T("");
    	//}}AFX_DATA_INIT
    	// Beachten Sie, dass LoadIcon unter Win32 keinen nachfolgenden DestroyIcon-Aufruf benötigt
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    
    void CDialogDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	//{{AFX_DATA_MAP(CDialogDlg)
    	DDX_Control(pDX, IDC_BUTTON1, m_btnHalloween);
    	DDX_Control(pDX, IDC_BWHICHOPTION, m_cWhichOption);
    	DDX_Text(pDX, IDC_RESULTS, m_sResults);
    	//}}AFX_DATA_MAP
    }
    
    BEGIN_MESSAGE_MAP(CDialogDlg, CDialog)
    	//{{AFX_MSG_MAP(CDialogDlg)
    	ON_WM_SYSCOMMAND()
    	ON_WM_PAINT()
    	ON_WM_QUERYDRAGICON()
    	ON_BN_CLICKED(IDC_EXIT, OnExit)
    	ON_BN_CLICKED(IDC_YESNOCANCEL, OnYesnocancel)
    	ON_BN_CLICKED(IDC_FILEOPEN, OnFileopen)
    	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    /////////////////////////////////////////////////////////////////////////////
    // CDialogDlg Nachrichten-Handler
    
    BOOL CDialogDlg::OnInitDialog()
    {
    
    COLORREF	crBtnColor;
    
    	CDialog::OnInitDialog();
    	crBtnColor = ::GetSysColor(COLOR_BTNFACE) + RGB(30, 30, 30);
    
    	// Hinzufügen des Menübefehls "Info..." zum Systemmenü.
    // Halloween button
    	m_btnHalloween.SetIcon(IDI_ICON2, IDI_ICON1);
    	// 48x48 icon button
    	// IDM_ABOUTBOX muss sich im Bereich der Systembefehle befinden.
    	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    	ASSERT(IDM_ABOUTBOX < 0xF000);
    
    	CMenu* pSysMenu = GetSystemMenu(FALSE);
    	if (pSysMenu != NULL)
    	{
    		CString strAboutMenu;
    		strAboutMenu.LoadString(IDS_ABOUTBOX);
    		if (!strAboutMenu.IsEmpty())
    		{	
    			pSysMenu->AppendMenu(MF_SEPARATOR);
    			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    		}
    	}
    
    	// Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt
    	//  wenn das Hauptfenster der Anwendung kein Dialogfeld ist
    	SetIcon(m_hIcon, TRUE);			// Großes Symbol verwenden
    	SetIcon(m_hIcon, FALSE);		// Kleines Symbol verwenden
    
    	// ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen
    
    	return TRUE;  // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten
    }
    
    void CDialogDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
    	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    	{
    		CAboutDlg dlgAbout;
    		dlgAbout.DoModal();
    	}
    	else
    	{
    		CDialog::OnSysCommand(nID, lParam);
    	}
    }
    
    // Wollen Sie Ihrem Dialogfeld eine Schaltfläche "Minimieren" hinzufügen, benötigen Sie 
    //  den nachstehenden Code, um das Symbol zu zeichnen. Für MFC-Anwendungen, die das 
    //  Dokument/Ansicht-Modell verwenden, wird dies automatisch für Sie erledigt.
    
    void CDialogDlg::OnPaint() 
    {
    	if (IsIconic())
    	{
    		CPaintDC dc(this); // Gerätekontext für Zeichnen
    
    		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
    
    		// Symbol in Client-Rechteck zentrieren
    		int cxIcon = GetSystemMetrics(SM_CXICON);
    		int cyIcon = GetSystemMetrics(SM_CYICON);
    		CRect rect;
    		GetClientRect(&rect);
    		int x = (rect.Width() - cxIcon + 1) / 2;
    		int y = (rect.Height() - cyIcon + 1) / 2;
    
    		// Symbol zeichnen
    		dc.DrawIcon(x, y, m_hIcon);
    	}
    	else
    	{
    		CDialog::OnPaint();
    	}
    }
    
    // Die Systemaufrufe fragen den Cursorform ab, die angezeigt werden soll, während der Benutzer
    //  das zum Symbol verkleinerte Fenster mit der Maus zieht.
    HCURSOR CDialogDlg::OnQueryDragIcon()
    {
    	return (HCURSOR) m_hIcon;
    }
    
    void CDialogDlg::OnExit() 
    {
    	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
    
    	//in der cpp-Datei 
                         //Hackerl Bitmap angeklickt sein.
    	OnOK();
    
    }
    
    void CDialogDlg::OnYesnocancel() 
    {
    	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
    
      	  ///////////////////////
          // EIGENER CODE, ANFANG
         ///////////////////////
    
         int iResults; // Variable für Schaltflächenauswahl
    
         // Benutzer fragen
         iResults = MessageBox("Ja, Nein oder Abbrechen drücken",
                     "Dialogfeld Ja, Nein, Abbrechen", 
                     MB_YESNOCANCEL | MB_ICONINFORMATION);
    
         // Angeklickte Schaltfläche ermitteln
         // Benutzer die angeklickte Schaltfläche melden
         switch (iResults)
         {
         case IDYES:    // Schaltfläche Ja?
             m_sResults = "Ja! Ja! Ja!";
             break;
         case IDNO:    // Schaltfläche Nein?
             m_sResults = "Nein, nein, nein, nein, nein.";
             break;
         case IDCANCEL:    // Schaltfläche Abbrechen?
             m_sResults = "Sorry, abgebrochen.";
             break;
         }
    
         // Dialogfeld aktualisieren
         UpdateData(FALSE);
    
         ///////////////////////
         // EIGENER CODE, ENDE
         ///////////////////////
    
    }
    
    void CDialogDlg::OnFileopen() 
    {
    	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
    	  ///////////////////////
          // EIGENER CODE, ANFANG
         ///////////////////////
    
         CFileDialog m_ldFile(TRUE);
    
         // Dialogfeld Öffnen zeigen und Ergebnis auffangen
         if (m_ldFile.DoModal() == IDOK)
         {
             // Gewählten Dateinamen ermitteln
             m_sResults = m_ldFile.GetPathName();
             // Dialogfeld aktualisieren
             UpdateData(FALSE);
         }
    
         ///////////////////////
         // EIGENER CODE, ENDE
         ///////////////////////
    
    }
    
    void CDialogDlg::OnStaticTest() 
    {
    	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
    
    }
    
    void CDialogDlg::OnButton1() 
    {
    	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
    
    }
    

    Dank schon mal wieder für eure Hilfe



  • toby schrieb:

    ---------------------------------------------------------------
    DialogDlg.cpp
    C:\Programme\Microsoft Visual Studio\MyProjects\Dialog\DialogDlg.cpp(107) : error C2660: 'SetIcon' : Funktion akzeptiert keine 2 Parameter
    Fehler beim Ausführen von cl.exe.

    Dialog.exe - 1 Fehler, 0 Warnung(en)
    -----------------------------------------------------------------

    // DialogDlg.cpp : Implementierungsdatei
    //
    
    // Halloween button
    	m_btnHalloween.SetIcon(IDI_ICON2, IDI_ICON1);
    

    Die Fehlermeldung sagt eigentlich eh schon alles: Die Methode SetIcon der Klasse CButton erwartet nur 1 Parameter.

    Näheres dazu findest du in der MSDN. Hier gibt's auch ein Example dazu.



  • 😞 hmm
    aber wie bekomme ich das den so das ich wenn ich mit der Maus über dem Butten bin ein anders ICON gezeigt bekomme als das was normal da ist.
    darum hab ich ja da zwei Icons und nicht eins.



  • hat den keiner einen Tipp für mich wie ich die Schaftflächen mit einem Bild verschönern kann? *bitte 😕 *



  • du musst eine Klasse von CButton ableiten, die DrawItem Methode überschreiben (WM_DRAWITEM Nachricht) und den Button selber zeichnen. Für Mouseover Effekte sieh dir die TrackMouseEvent Funktion an.


Anmelden zum Antworten