SendMessage von Menüpunkt an Ansichtsklasse
-
Hi,
ich habe eine SDI-Anwendung mit CFormView (VC++.net).In TestView.cpp habe ich eine User-Nachricht zum Füllen einer Strukturansicht definiert.
BEGIN_MESSAGE_MAP(CTestView, CFormView) ON_MESSAGE(WM_MENUE_TREE, OnFillMenueTree) LRESULT CTestView::OnFillMenueTree( WPARAM sprache, LPARAM lParam ) { ... }Über einen Button kann ich jetzt eine entsprechende Nachricht generieren.
void CTestView::OnBnClickedButton1() { // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein. SendMessage( WM_MENUE_TREE, i_sprache, 0L );Das funktioniert so weit und meine Strukturansicht wird gefüllt. Ich möchte diese Nachricht aber auch generieren, wenn ich über die Menüleiste einen Menüpunkt (z.B. Sprache->Deutsch) anwähle.
[cpp]void CTestApp::OnSpracheDeutsch()
{
SendMessage( WM_MENUE_TREE, i_sprache, 0L );[/cpp]In CTestApp führt SendMessage zu der Fehlermeldung:
error C2660: 'SendMessageA': Funktion akzeptiert keine 3 ArgumenteWo liegt der Fehler???
-
Tiger287 schrieb:
[...]
In CTestApp führt SendMessage zu der Fehlermeldung:
error C2660: 'SendMessageA': Funktion akzeptiert keine 3 ArgumenteWo liegt der Fehler???
Nun, eine von CWinApp abgeleitete Klasse ist kein Fenster (erbt nicht von CWnd)! Daher ist das SendMessage, welches Du aus CTestApp aufrufst, die Funktion aus der Win32-API, und die will einen Parameter mehr haben, nämlich das window handle (HWND) des Fensters, welches die Nachricht erhalten soll, im nachfolgenden Beispiel das main frame window:
void CTestApp::OnSpracheDeutsch() { ASSERT(m_pMainWnd != NULL); HWND hWnd = m_pMainWnd->GetSafeHwnd(); if (::IsWindow(hWnd)) ::SendMessage(hWnd, WM_MENUE_TREE, i_sprache, 0L); }MfG
Stephan
-
Hi,
danke für die Antwort. Ich habe es ausprobiert und es hat bei mir funktioniert. Die Nachricht kommt im main frame window an. Die folgende Anweisung hat die gleiche Wirkung.AfxGetMainWnd()->SendMessage( WM_MENUE_TREE, i_sprache, 0L );Mein Problem war aber eine Nachricht an CFormView. Wie kann ich die Nachricht dahin senden?