Design



  • :: NoName :: schrieb:

    Ja, das ist so richtig. Stimmt denn was nicht ?

    Gruß
    :: NoName ::

    Ja, es geht nicht!
    Es ist keine Änderung feststellbar!

    PS: Such bitte nochmal bei dir, irgendwo muss die Funktion ja aufgerufen werden



  • Das ist der Ärger mit 6.0 und 2003. Nichts geht mehr so wie
    man es vorher gemacht hat. Und alte Projekte in 2003 kompilieren
    bringt meist auch mehr Fehlermeldungen als man sich je hätte
    vorstellen können.



  • @::NoName::
    Wird Sie den nirgends aufgerufen (kann ich mir irgendwie nicht vorstellen!!) ?

    MfG,
    D.Derigs



  • Gehe mal bitte hierhin, da findest du ein kleines Beispiel:

    http://www.codeguru.com/Cpp/W-D/dislog/background/article.php/c1895/



  • Die Funktion wird nicht ausgeführt weil der Eintrag

    ON_WM_CTLCOLOR()
    

    in der Messagemap fehlt.sen



  • D.Derigs schrieb:

    Wird Sie den nirgends aufgerufen (kann ich mir irgendwie nicht vorstellen!!) ?

    Teste das doch einfach mal mit einer MessageBox()...?

    Gruß
    :: NoName ::



  • Es passiet nichts, auch nicht in einer MessageBox
    .cpp:

    / 2645z2erDlg.cpp : Implementierungsdatei
    //
    
    #include "stdafx.h"
    #include "2645z2er.h"
    #include "2645z2erDlg.h"
    #include ".\2645z2erdlg.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    
    // CAboutDlg-Dialogfeld für Anwendungsbefehl 'Info'
    
    class CAboutDlg : public CDialog
    {
    public:
    	CAboutDlg();
    
    // Dialogfelddaten
    	enum { IDD = IDD_ABOUTBOX };
    
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung
    
    // Implementierung
    protected:
    	DECLARE_MESSAGE_MAP()
    };
    
    CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
    {
    }
    
    void CAboutDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
    	ON_WM_CTLCOLOR()
    END_MESSAGE_MAP()
    
    // Cz2erDlg Dialogfeld
    
    Cz2erDlg::Cz2erDlg(CWnd* pParent /*=NULL*/)
    	: CDialog(Cz2erDlg::IDD, pParent)
    {
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    
    void Cz2erDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    }
    
    BEGIN_MESSAGE_MAP(Cz2erDlg, CDialog)
    	ON_WM_SYSCOMMAND()
    	ON_WM_PAINT()
    	ON_WM_QUERYDRAGICON()
    	//}}AFX_MSG_MAP
    	ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel)
    END_MESSAGE_MAP()
    
    // Cz2erDlg Meldungshandler
    
    BOOL Cz2erDlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
    
    	// Hinzufügen des Menübefehls "Info..." zum Systemmenü.
    
    	// 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
    
    	// TODO: Hier zusätzliche Initialisierung einfügen
    
    	return TRUE;  // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten
    }
    
    void Cz2erDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
    	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    	{
    		CAboutDlg dlgAbout;
    		dlgAbout.DoModal();
    	}
    	else
    	{
    		CDialog::OnSysCommand(nID, lParam);
    	}
    }
    
    // Wenn Sie dem 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 ausgeführt.
    
    void Cz2erDlg::OnPaint() 
    {
    	if (IsIconic())
    	{
    		CPaintDC dc(this); // Gerätekontext zum Zeichnen
    
    		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
    
    		// Symbol in Clientrechteck 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 System ruft diese Funktion auf, um den Cursor abzufragen, der angezeigt wird, während der Benutzer
    //  das minimierte Fenster mit der Maus zieht.
    HCURSOR Cz2erDlg::OnQueryDragIcon()
    {
    	return static_cast<HCURSOR>(m_hIcon);
    }
    
    HBRUSH Cz2erDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
        HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    if (pWnd->GetDlgCtrlID() == IDC_123)
        {
            pDC->SetTextColor(RGB(0,0,2550)); // Setzt die Textfarbe auf blau
            HBRUSH hBrush = CreateSolidBrush(RGB(255,0,0)); //Setzt die Hintergrundfarbe auf rot
            return (HBRUSH) hBrush;
        }
        return hbr;
    }
    
    void Cz2erDlg::OnBnClickedCancel()
    {
    	// TODO: Add your control notification handler code here
    

    .h:

    // 2645z2erDlg.h : Headerdatei
    //
    
    #pragma once
    
    // Cz2erDlg Dialogfeld
    class Cz2erDlg : public CDialog
    {
    // Konstruktion
    public:
    	Cz2erDlg(CWnd* pParent = NULL);	// Standardkonstruktor
    
    // Dialogfelddaten
    	enum { IDD = IDD_Z2ER_DIALOG };
    
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV-Unterstützung
    
    // Implementierung
    protected:
    	HICON m_hIcon;
    
    	// Generierte Funktionen für die Meldungstabellen
    	virtual BOOL OnInitDialog();
    	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    	afx_msg void OnPaint();
    	afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); 
    	afx_msg HCURSOR OnQueryDragIcon();
    	DECLARE_MESSAGE_MAP()
    public:
    	afx_msg void OnBnClickedCancel();
    };
    


  • Du hast ON_WM_CTLCOLOR() in den AboutDialog eingefügt nicht in Cz2erDlg



  • Mein, Fehler!
    Aber jetzt funktionierts!!!

    PS: Kann man das auch generell auf alles anwenden, nicht nur auf eine bestimmte Sache (z.B. alle Statics, alle Buttons, usw.)?
    Vielleicht das if weglassen? (Werde ich zu gegebener Zeit auch probieren!)

    MfG,
    D.Derigs



  • Du kannst das pWnd mit dynamic_cast casten.

    Ist das Ergebnis des cast ungleich NULL, dann war es erfolgreich.

    CButton* pBtn = dynamic_cast<CButton*>pWnd;
    if (pBtn)
    {
        // Es ist ein Button (Radiobutton, Checkbox oder normal)
    }
    

    Dafür muss aber RTTI eingeschaltet sein! ⚠


Anmelden zum Antworten