minimieren ueberschreiben



  • hallo leute

    die frage ist kurz und knapp

    wie kann ich die funktion fuer das minimieren mit einer eigenen ueberschreiben in einer dialogressource ?

    ich hab hier n button fuer "minimieren in tray" - das wuerd ich gern auf das "normale" minimieren auf startleiste umlenken

    danke fuer alle reaktionen {o;


  • Mod

    Du kannst WM_SYSCOMMAND mit dem entsprechenden Minimize Code versenden.



  • und wo ? bei on init ?

    ist das erste mal das ich direkt mit der dialog box arbeite - sonst hab ich immer die fenster manuell erstellt {jeff prosise}


  • Mod

    Jetzt verstehe ich was nicht. Was hat OnInitDialog mit dem minimieren zu tun?
    ShowWindiw(SW_MINIMIZE) geht natürlich auch.



  • ja wie gesagt, ich weiss doch nicht wo und wie ich das mit dem "WM_SYSCOMMAND" schreiben soll

    ShowWindow wird zb ja gar nicht aufgerufen
    .h files

    class COwnApp : public CWinApp
    {
    public:
    	COwnApp();
    	virtual BOOL InitInstance();
    
    	DECLARE_MESSAGE_MAP()
    };
    
    extern CSOwnApp theApp;
    
    class COwnDlg : public CDialog
    {
    public:
    	COwnDlg(CWnd* pParent = NULL);
    
    	enum { IDD = IDD_OWN_DIALOG };
    protected:
    	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV-Unterstützung
    	HICON m_hIcon;
    
    	virtual BOOL OnInitDialog();
    	afx_msg void OnPaint();
    	afx_msg HCURSOR OnQueryDragIcon();
    
    	DECLARE_MESSAGE_MAP()
    

    .cpp files

    BEGIN_MESSAGE_MAP(COwnApp, CWinApp)
    	ON_COMMAND(ID_HELP, CWinApp::OnHelp)
    END_MESSAGE_MAP()
    
    CShutDownApp::COwnApp()
    {
    }
    
    COwnApp theApp;
    
    BOOL COwnApp::InitInstance()
    {
    	InitCommonControls();
    
    	CWinApp::InitInstance();
    
    	SetRegistryKey(_T("Vom lokalen Anwendungs-Assistenten generierte Anwendungen"));
    
    	COwnDlg dlg;
    	m_pMainWnd = &dlg;
    	INT_PTR nResponse = dlg.DoModal();
    
    	return TRUE;
    }
    
    COwnDlg::COwnDlg( CWnd* pParent )	: CDialog( CSOwnDlg::IDD, pParent )
    {
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    
    BEGIN_MESSAGE_MAP(COwnDlg, CDialog)
    	ON_WM_PAINT()
    END_MESSAGE_MAP()
    
    BOOL COwnDlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
    
    	SetIcon(m_hIcon, TRUE);			// Großes Symbol verwenden
    	SetIcon(m_hIcon, FALSE);		// Kleines Symbol verwenden
    }
    void COwnDlg::OnPaint() 
    {
    	if ( IsIconic() ){
    		CPaintDC dc( this );
    
    		SendMessage( WM_ICONERASEBKGND, reinterpret_cast< WPARAM >( dc.GetSafeHdc() ), 0 );
    
    		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;
    
    		dc.DrawIcon( x, y, m_hIcon );
    	}
    	else
    		CDialog::OnPaint();
    }
    HCURSOR COwnDlg::OnQueryDragIcon()
    {
    	return static_cast<HCURSOR>( m_hIcon );
    }
    

    das is was ich hab {eigene methoden und members weggelassen}
    wo und wie komm ich nu an die funktion fuer den minimieren button



  • Hallo,

    ich würde die Nachricht fürs minimieren einfach abfangen und entsprechend anders verarbeiten?

    Gruß
    Gerald



  • ja das will ich ja machen, aber ich weiss nicht wie


  • Mod

    Du musst einfach einen Handler für WM_SYSCOMMAND zu Deinem Dialog hinzufügen. Das machst Du mit dem Wizard.



  • ein wizard dafuer hab ich nicht gefunden aber habs trotzdem hinbekommen

    BEGIN_MESSAGE_MAP(COwnDlg, CDialog)
    	ON_WM_PAINT()
    	ON_WM_SYSCOMMAND()       // hinzugefuegt
    END_MESSAGE_MAP()
    
    class COwnDlg : public CDialog
    {
    public:
        COwnDlg(CWnd* pParent = NULL);
    
        enum { IDD = IDD_OWN_DIALOG };
    protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung
        HICON m_hIcon;
    
        virtual BOOL OnInitDialog();
        afx_msg void OnPaint();
        afx_msg HCURSOR OnQueryDragIcon();
        afx_msg void OnSysCommand( UINT nID, LPARAM lParam );   // hinzugefuegt
    
        DECLARE_MESSAGE_MAP()
    
    // erstellt
    void COwnDlg::OnSysCommand( UINT nID, LPARAM lParam )
    {
    	switch( nID )
    	{
    	case SC_MINIMIZE:
    		OnMini();
    		break;
    	case SC_CLOSE:
    		COwnDlg::OnClose();
    		break;
    	default:
    		break;
    	}
    }
    

    danke fuer den schubs in die richtige richtung {=


Anmelden zum Antworten