CDialogBar ...
-
Ich habe eine CDialogBar eingerichtet. Eine Combobox und zwei einfache
Schaltflächen. Dann habe ich einen Event-Handler hinzugefügt, und das
Programm gestartet. Ein Click auf die Schaltfläche, und es tat sich nichts.
Gerade so, als wäre die Schaltfläche deaktiviert. Dann versuchte ich es
mit GetDlgItem(IDC_BUTTON1)->EnableWindow(true); , kein Erfolg was nun ?
-
Aber du siehst, dass der Button beim Klicken grafisch absesenkt wird? Das würde er bei einem deaktivierten Button ja nicht tun. Mal einen Breakpoint im Event-Handler gesetzt? MFC-Message-Map ist korrekt (ON_BN_CLICKED-Makro)?
-
Dir WM_COMMAND Nachrichten werden an den Owner des CDialogBar gesendet und IMHO nicht an den Bar selbst!
-
Danke! das hat mir geholfen!
Nur noch eins: folgender Text:Mainframe.h ...
CDialogBar dbr;
Mainframe.cpp ...
dbr.Create(this, IDD_DIALOG1, CBRS_TOP, 0x4801);
In einem Buch habe ich gelesen, dass der letzte Parameter in einem
Bereich zwischen: 0x4800 und 0x4820 liegen muss, es handelt sich um eine
Fenster-ID. Was hat es damit auf sich ?
-
Woher hast Du die ID? Dialogbars und Contrl Bars liegen hier
#define AFX_IDW_CONTROLBAR_FIRST 0xE800
#define AFX_IDW_CONTROLBAR_LAST 0xE8FFBars werden automatisch von dem entsprechenden CFrameWnd angeordnet und auch angepasst, wenn sich die Fenstergröße ändert. Damit der Fensterhandler einen Bar erkennt wird ihm eine entsprechende ID gegeben.
Speziell für den Preview Mode beim Drucken ist die Einhaltung dieser IDs sehr wichtig.
Man sollte sich aber nicht täuschen lassen. Insgesammt sind nur 32 Controlbars erlaubt, außer man hat ein eigenes Handling entwickelt (oder verwendet MFCNext)
-
Die ID habe ich gelesen im Buch: Inside Visual C++ 6.0 von David Kruglinsky u.a.
Seite 867-868. Wie Kann ich vermeiden, dass es einen (sag ich mal)
ID-Konflikt gibt?
-
GeorgC++ schrieb:
Die ID habe ich gelesen im Buch: Inside Visual C++ 6.0 von David Kruglinsky u.a.
Seite 867-868. Wie Kann ich vermeiden, dass es einen (sag ich mal)
ID-Konflikt gibt?1. Wirst Du dort sicher keine festen Werte sondern symbolische Werte finden.
2. Muasst Du eben aufpassen.
-
Entschuldige, dass ich dich nochmals nerve.
Der ID_Bereich im Buch lag in der Tat zwischen 0xE800 und 0xE820;
Wenn ich als ID 0xE801 wähle, kann ich sicher sein, dass der
Anwendungsassistent, diese ID nicht schon vergeben hat? Oder gehört
dieser Bereich mir ? Martin ich möchte mich an dieser Stelle, bei Dir
recht herzlich bedanken. Du hast mir schon oft geholfen. Ich selber
konnte erst drei Fragen beantworten.
-
Geh in die Ressourcenansicht, einfacher klick auf <projekt>.rc.
Dann Menü "Bearbeiten->Ressourcesymbole", dort Neu wählen. Der Rest ist selbsterklärend
-
GeorgC++ schrieb:
Entschuldige, dass ich dich nochmals nerve.
Der ID_Bereich im Buch lag in der Tat zwischen 0xE800 und 0xE820;
Wenn ich als ID 0xE801 wähle, kann ich sicher sein, dass der
Anwendungsassistent, diese ID nicht schon vergeben hat?Rserviert sind diese IDs und nur diese werden auch vom Wizard verwendet:
#define AFX_IDW_TOOLBAR 0xE800 // main Toolbar for window
#define AFX_IDW_STATUS_BAR 0xE801 // Status bar window
#define AFX_IDW_PREVIEW_BAR 0xE802 // PrintPreview Dialog Bar
#define AFX_IDW_RESIZE_BAR 0xE803 // OLE in-place resize bar
#define AFX_IDW_REBAR 0xE804 // COMCTL32 "rebar" Bar
#define AFX_IDW_DIALOGBAR 0xE805 // CDialogBar...
Du solltest also für eigene Bars höhere IDs verwenden, wobei Du AFX_IDW_DIALOGBAR verwenden kannst, denn es gibt keinen internen Bar mit dieser ID.
-
Noch etwas: Ich möchte eine DialogBar mit einer ComboBox ausstatten.
folgender Text:
class CMainFrame ..
CDialogBar dbr;
CComboBox* cbx;Mainframe.cpp .. OnCreate ...
dbr.Create(this, IDD_DIALOG1, CBRS_TOP, 0xE80A);
cdx = (CComboBox*)GetDlgItem(IDC_COMBO1);cdx.AddString("Ein String ..."); // Da kam ein Fehler-Abbruch
Die Nachrichten der DialogBar werden an MainFrame gesendet,
Damit ich arbeiten kann(Mit der ComboBox, ID: IDC_COMBO1),
brauche ich einen Zeiger auf IDC_COMBO1, woher ?
-
Natürlich: cbx->AddString(....