Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Nichtmodale Dialogbox inaktiv

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
19.09.2005, 22:09 Uhr
azag1



Hallo Liebe Forumgemeinde!

Ich habe in .Net 2003 eine Dialogbasierte Anwendung. Ich habe einen Hauptdialog der über die App mit DoModal aufgerufen wird und einen Unterdialog, der jedoch Nicht Modal ist, also über ->Create aufgerufen wird. Nun habe ich den Dialog als Childwindow deklariert (WS_CHILD) damit er nicht über den anderen Dialog beim minimieren herausragt, sondern mit abgeschnitten wird. Dies funktioniert auch soweit, jedoch ist der Dialog irgendwie disabled. ->EnableWindow(TRUE) hilft da auch nicht weiter. Man kann den Dialog bedienen, Buttons und Checkboxen funktionieren, aber z.B. eine EditBox funktioniert nicht, man kann dort nicht hereinschreiben und die Titelleiste ist grau hinterlegt, anstatt blau (bei einem aktiven Dialog).
Setzte ich in den Eigenschaften die Titelleiste auf False und Übergeordnetes Steruerelement ebenfalls auf False, läuft auch die Editbox, jedoch kann ich logischerweise das Fenster nicht mehr bewegen, und das sollte nicht sein.

Woran mag das liegen, hab schon alle möglichen Einstellungen im Dialog ausprobiert, aber nichts half.

Ich würde mich freuen, wenn Ihr mir weiterhelfen könntet.
Vielen Dank schonmal im Voraus.

Gruß,

Adam.

Anbei noch mein Quelllcode und ein Auszug aus der Ressource-Datei:

Header Hauptdialog:

C++:
// NonModalDlg.h : Headerdatei
//

#pragma once
#include "NonModal1.h"

// CNonModalDlg Dialogfeld
class CNonModalDlg : public CDialog
{
// Konstruktion
public:
    CNonModalDlg(CWnd* pParent = NULL);    // Standardkonstruktor
    virtual ~CNonModalDlg();
// Dialogfelddaten
    enum { IDD = IDD_NONMODAL_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 OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    DECLARE_MESSAGE_MAP()
private:
    CNonModal1* m_pCNonModalDlg;
public:
    afx_msg void OnBnClickedOk();
};



cpp Hauptdialog:

C++:
// NonModalDlg.cpp : Implementierungsdatei
//

#include "stdafx.h"
#include "NonModal.h"
#include "NonModalDlg.h"
#include ".\nonmodaldlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CNonModalDlg Dialogfeld


CNonModalDlg::CNonModalDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CNonModalDlg::IDD, pParent)
    , m_pCNonModalDlg(NULL)
{
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    m_pCNonModalDlg = NULL;
}

CNonModalDlg::~CNonModalDlg()
{
    delete m_pCNonModalDlg;
}

void CNonModalDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CNonModalDlg, CDialog)
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    //}}AFX_MSG_MAP
    ON_BN_CLICKED(IDOK, OnBnClickedOk)
END_MESSAGE_MAP()


// CNonModalDlg Meldungshandler

BOOL CNonModalDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    // 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
    ShowWindow(SW_MAXIMIZE);
    // TODO: Hier zusätzliche Initialisierung einfügen
    
    return TRUE;  // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten
}

// 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 CNonModalDlg::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 CNonModalDlg::OnQueryDragIcon()
{
    return static_cast<HCURSOR>(m_hIcon);
}

void CNonModalDlg::OnBnClickedOk()
{
    // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein.
    
    if (m_pCNonModalDlg == NULL)
    {
        // Dialog-Objekt erstellen
        m_pCNonModalDlg = new CNonModal1(this);
        // Dialog erstellen und anzeigen
        m_pCNonModalDlg->Create(CNonModal1::IDD);
        m_pCNonModalDlg->ShowWindow(SW_NORMAL);
    }

    //OnOK();
}



Header Childdialog:

C++:
#pragma once


// CNonModal1-Dialogfeld

class CNonModal1 : public CDialog
{
    DECLARE_DYNAMIC(CNonModal1)

public:
    CNonModal1(CWnd* pParent = NULL);   // Standardkonstruktor
    virtual ~CNonModal1();

// Dialogfelddaten
    enum { IDD = IDD_DIALOG1 };

protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung

    DECLARE_MESSAGE_MAP()
private:
    CWnd* m_pParent;
};



Cpp Childdialog:

C++:
// NonModal1.cpp : Implementierungsdatei
//

#include "stdafx.h"
#include "NonModal.h"
#include "NonModal1.h"


// CNonModal1-Dialogfeld

IMPLEMENT_DYNAMIC(CNonModal1, CDialog)
CNonModal1::CNonModal1(CWnd* pParent /*=NULL*/)
    : CDialog(CNonModal1::IDD, pParent)
    , m_pParent(NULL)
{
     m_pParent = pParent;
}

CNonModal1::~CNonModal1()
{
}

void CNonModal1::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(CNonModal1, CDialog)
END_MESSAGE_MAP()


// CNonModal1-Meldungshandler



Auszug aus der Ressource-Datei

C++:
// Dialog
//
IDD_NONMODAL_DIALOG DIALOGEX 0, 0, 322, 201
STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP |
    WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CLIENTEDGE | WS_EX_CONTROLPARENT | WS_EX_STATICEDGE |
    WS_EX_APPWINDOW
CAPTION "NonModal"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,265,7,50,16
    PUSHBUTTON      "Abbrechen",IDCANCEL,265,25,50,16
    CTEXT           "TODO: Dialogfeld-Steuerelemente hier positionieren.",
                    IDC_STATIC,10,96,300,8
END

IDD_DIALOG1 DIALOGEX 0, 0, 186, 95
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_CHILD | WS_CAPTION
EXSTYLE WS_EX_CONTROLPARENT
CAPTION "Nicht Modal"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,129,7,50,14
    PUSHBUTTON      "Abbrechen",IDCANCEL,129,24,50,14
    EDITTEXT        IDC_EDIT1,39,27,40,14,ES_AUTOHSCROLL
END


Dieser Post wurde am 19.09.2005 um 22:13 Uhr von azag1 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: