ComboBox zeigt nur zwei Einträge (VS2005/MFC)

Nukleo

Mitglied
Hi,

ich habe eine ComboBox mit fünf zur Laufzeit eingefügten Einträgen. Wenn ich die ComboBox aufklappe sehe ich aber nur zwei und muss zu den anderen runter scrollen. Was muss ich tun, damit ich alle fünf Einträge sehe.

Dann hab ich noch ne Frage. Ist die ComboBox ausgewählt, reagiert sie sowohl auf hoch/runter Klicks als auch auf rechts/links Klicks. Ich will gerne, dass die rechts/links-Klicks an eine RadioButton-Group gehen. Geht das?

Vielen Dank für Eure Hilfe,
Emu
 

MCoder

Erfahrenes Mitglied
Was muss ich tun, damit ich alle fünf Einträge sehe.
Im Dialogdesigner rechts auf den Pfeil der ComboBox klicken. Dann kannst du den Listenbereich mit der Maus auf die passende Größe ziehen.

Ist die ComboBox ausgewählt, reagiert sie sowohl auf hoch/runter Klicks als auch auf rechts/links Klicks. Ich will gerne, dass die rechts/links-Klicks an eine RadioButton-Group gehen. Geht das?
Ich bin mir nicht sicher, ob's so funktioniert aber du könntest im Dialog die via "PreTranslateMessage" die an die ComboBox gerichteten rechts/links-Tasten abfangen und die entsprechenden Aktionen ausführen.

Gruß
MCoder
 

Nukleo

Mitglied
Super,

funktioniert beides. Danke! Nachfolgend der Code um die Tastenereignisse umzulenken. Hier sollen die auf einer RadioButtonGroup ausgeführten Hoch/Runter-Ereignisse an eine best. ComboBox übergeben werden. Vielleicht habt Ihr noch ein paar Verbesserungsvorschläge:
Code:
BOOL CWinRapDlg::PreTranslateMessage(MSG* pMsg) 
     {
		// Ein Tastenereigniss ist eingetreten
		  if(pMsg->message==WM_KEYDOWN)
		  {
			  //das focussierte Steuerelement
			  CWnd* foc = GetFocus();

			  // alter Wert der ComboBox (ControlVariable)
			  int cm = (colorModel)(m_combo_cm.GetCurSel());

			  // alter Wert der RadioGroup (ValueVariable)
			  int ch = m_nChn;

			  // Prüfen ob eines der Radiobutton focussiert ist
			  if (GetDlgItem(IDC_RADIO1)->m_hWnd == foc->m_hWnd ||
				  GetDlgItem(IDC_RADIO2)->m_hWnd == foc->m_hWnd ||
				  GetDlgItem(IDC_RADIO3)->m_hWnd == foc->m_hWnd ||
				  GetDlgItem(IDC_RADIO4)->m_hWnd == foc->m_hWnd)

					  // Prüfen ob Hoch oder Runter gedrückt wurde
					  if (pMsg->wParam ==  VK_UP || pMsg->wParam == VK_DOWN)
					  {

						  //Wenn möglich Wert bei Up-Taste verringern
						  if(pMsg->wParam== VK_UP && cm > 0) cm -= 1;

						  //Wenn möglich Wert bei Down-Taste erhöhen
						  if(pMsg->wParam== VK_DOWN && cm <= 4) cm += 1;

						  //Neuen Wert an die Combobox übergeben
						  m_combo_cm.SetCurSel(cm);

						  //Werte der View an Arbeitsklassen übergeben
						  ShowValues();

						  // Ich vermute, dass hierdurch die Ereignisse nicht weiter verarbeitet werden
						  return true;
					}
		  } 

          return CDialog::PreTranslateMessage(pMsg);
       }
 
Zuletzt bearbeitet: