:warning: EditBox entsprechend einer Radiobuttonw-Wahl readonly setzen
-
hi leute,
bin gerade am finetuning meines progs und bin auf ein problem gestossen, wo ich nicht weiter komme.ich habe 3 radiobuttons und 3 x 4 editboxen, wovon je nach radiobuttonwahl 4, 8 oder 12 beschreibbar sein sollen. die anderen editboxen sollen auf readonly gesetzt werden, bzw. grau unterlegt.
hab bisher versuch via sendmessage(hwnd, ES_READONLY, 1, 0) den schreibschutz zu setzen, allerdings erfolglos. ehrlich gesagt, weiss ich auch nicht, wie ich das in der nachrichtenschleife meiner dialogbox machen soll... wenn ich die abfrage und readonly setzen im initdlg mache, dann kann ja eigentlich bein ändern des radiobuttons nix passieren, weil der initdlg ja nur beim öffnen der dialogbox aufgerufen wird. setze ich es in mein 'case idc_editbox' dann müsste es ja nur readonly sein, wenn ich in die entsprechende editbox klicke... bin ratlos und hoffe ihr hab ein paar ideen, denn habs bisher nicht mal geschafft eine editbox zu grauen , ausser im rc-manager des vs8 den flag setzen. aber dann isses natürlich immer grau.
mein code sieht in der art aus (nur mit jeweils einer box statt 4
):LRESULT CALLBACK DlgSetup1Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_INITDIALOG: SetDlgItemInt(hWnd, IDC_NUMB, iChkNumb1, TRUE); [...] SetDlgItemInt(hWnd, IDC_NUMB2, iChkNumb11, TRUE); [...] SetDlgItemInt(hWnd, IDC_NUMB3, iChkNumb15, TRUE); [...] SetWindowText(hWnd, "Preferences of the Setup 1"); if (Rb1==TRUE) CheckRadioButton(hWnd, IDC_RADIO1, IDC_RADIO3, IDC_RADIO1); if (Rb2==TRUE) CheckRadioButton(hWnd, IDC_RADIO1, IDC_RADIO3, IDC_RADIO2); if (Rb3==TRUE) CheckRadioButton(hWnd, IDC_RADIO1, IDC_RADIO3, IDC_RADIO3); return TRUE; case WM_COMMAND: switch(LOWORD (wParam)) { //////////////////////DIESE EDITFELDER IMMER AN/////////////////////////////////////////////////////////////////// case IDC_NUMB: //Number iChkNumb1 = GetDlgItemInt(hWnd, IDC_NUMB, NULL, TRUE); return (0); [...] //////////////////////////////////////////////////////AB HIER NUR AN WENN RADIOBUTTON 2 KLICKED////////////////////////////// case IDC_NUMB2: //Number SendMessage(hWnd,EM_SETREADONLY, TRUE, 0); return (0); [...] /////////////////////////////////AB HIER EDITFELDER AN BEI RADIO 3 KLICKED///////////////////////////////////////// case IDC_NUMB3: //Number iChkNumb15 = GetDlgItemInt(hWnd, IDC_NUMB3, NULL, TRUE); return (0); [...] //-----------------RADIOBUTTONS-------------------------------- case IDC_RADIO1: //RadioBT Mode Fill Rb1 = TRUE; CheckRadioButton( hWnd, IDC_RADIO1,IDC_RADIO3, IDC_RADIO1 ); break; case IDC_RADIO2: //RadioBT Mode Line Rb2 = TRUE; CheckRadioButton( hWnd, IDC_RADIO1,IDC_RADIO3, IDC_RADIO2 ); break; case IDC_RADIO3: //RadioBT Mode Point Rb3 = TRUE; CheckRadioButton( hWnd, IDC_RADIO1,IDC_RADIO3, IDC_RADIO3); break; case IDOK : [...] Rb1 = (IsDlgButtonChecked(hWnd, IDC_RADIO1 ) == BST_CHECKED); Rb2 = (IsDlgButtonChecked(hWnd, IDC_RADIO2 ) == BST_CHECKED); Rb3 = (IsDlgButtonChecked(hWnd, IDC_RADIO3 ) == BST_CHECKED); [...] gl.DrawGLScene(); EndDialog (hWnd, 0) ; return TRUE; case IDCANCEL : EndDialog (hWnd, 0) ; return TRUE ; } break; } return FALSE; }vielen dank schon mal. noch eine andere frage: wie mache ich es, dass meine boxen z.b. nur double-werte entgegen nehmen und bei einer eingabe eines buchstabens oder anderer characters eine meldung bringt, die den wertebereich der legalen eingaben nochmal anzeigt. ich habe das problem, dass ich nur integer-werte aus den boxen abfangen kann mit GetDialogItemInt() oder Text mit GetDialogItemText() (so oder ähnlich). gibts da keine alternativen?