コマンド釦を押したときに
SetWindowText()でエディットボックスに表示させようと
したのですが空白になったまま表示ができません。
どうしたら表示できるでしょうか?
よろしくお願いします。
CEdit m_edit;
void CSANPLE::OnOK()
{
m_edit.SetWindowText(あいうえお);
}
環境
MFC Appwizard(exe)
windows2000
vc++6.0
「SetWindowText」を使う以外の回答です
クラスウィザードを使ってメンバー変数を追加
カテゴリを「値」、タイプを「CString」にし
設定したメンバ変数に
>(あいうえお)
をセットしてあげれば表示できるようになります
つまり 1つのコントロールIDに
2つのタイプ (CEDIT、CString)
2つのメンバ変数(m_ce_xx、m_xx)
のようなことができます
CString m_edit1;を追加したんですけど
表示されませんでした。どうしてでしょうか?
CEdit m_edit;
CString m_edit1;
void CSANPLE::OnOK()
{
m_edit1=あいうえお;
}
m_edit1=あいうえお;
の後に、
UpdateData(FALSE);
が必要かと思われます。
(これって、DDXを使用してるんですよね?)
じたばたする前に、まずボタンが押されたとき確かにそこに飛んできているかを
確認するのが先決かと。通常 SetWindowTextできないってのは考えにくいのです。
AfxMessageBox(表示しました);をいれてやると
AfxMessageBox(表示しました);を実行したときに表示することができました。
しかしUpdateData(FALSE);の方は表示できませんでした。
CEdit m_edit;
CString m_edit1;
表示できた↓
void CSANPLE::OnOK()
{
m_edit1=あいうえお;
AfxMessageBox(表示しました);
}
表示できない↓
void CSANPLE::OnOK()
{
m_edit1=あいうえお;
UpdateData(FALSE);
}
メンバ変数がコントロールに関連付けられてないってオチは…さすがにないよなぁ。
関連付けられてないとASSERTで落ちるはずだから…。
MFCを使用したダイアログベースのアプリケーションだという前提で
ひとつ確認しておきたいんですが、
CEdit m_edit;
CString m_edit1;
というのは、ClassWizardで作成したものでしょうか?
つまり、AFX_DATA, AFX_DATA_MAPで管理されている
コントロールなのでしょうか?
たとえば、以下のコードは動作しますか?
void CSANPLE::OnButton2()
{
CString strEdit;
m_edit.GetWindowText(strEdit);
AfxMessageBox(strEdit);
}
下記コード動作しました。
エディットボックスからデータ取得して
表示しました。
void CSANPLE::OnButton2()
{
CString strEdit;
m_edit.GetWindowText(strEdit);
AfxMessageBox(strEdit);
}
>CEdit m_edit;
>void CSANPLE::OnOK() <- この名前って?
>{
> m_edit.SetWindowText(あいうえお);
>>> ここになにかないですか? <<<
>}
もしかして表示確認する暇もなくダイアログを閉じているのでは?
でも「空白になったまま表示ができません」ってあるしなぁ。
>表示できた↓
>void CSANPLE::OnOK()
>{
> m_edit1=あいうえお;
> AfxMessageBox(表示しました);
>}
このソースではメッセージボックスは表示されても
エディットボックスの文字列はは更新されないはず。
何が「表示できた」のか???
きっとOnCtlColorで
pDC->SetTextColor( RGB( 255, 255, 255 ) );
とでもしてるんでしょ。
長いプログラムでないのならいっその事全文公開してもらった方が
話が早いかも。
どうも、説明が不十分でまさにそこが悪いという所が表に出てきてないような
感じがします。
話の感じだとテストプログラムレベルの長さみたいだし、その方が良いような。
あまりにも長いというのであれば、仕方ないですけれどね。
補足します
MFC Appwizard(exe)で作成したダイアログベースのアプリです。
OnOK()はデフォルトで作成される[作成]釦のことです。
ステップ実行で一行一行確認してます。
その結果(2)はAfxMessageBoxを実行したときに”あいうえお”が表示されます。
CString m_edit1;
CEdit m_edit;
(1)ダイアログ上にあるエディットボックスに”あいうえお”が表示がされない↓
void CSANPLE::OnOK()
{
m_edit.SetWindowText(あいうえお);
}
(2)
ダイアログ上にあるエディットボックスに”あいうえお”が表示できた↓
void CSANPLE::OnOK()
{
m_edit1=あいうえお;
AfxMessageBox(表示しました);
}
修正します。
OnOK()はデフォルトで作成される[作成]釦のことです。(間違い)
OnOK()はデフォルトで作成される[OK]釦のことです。(正解)
m_edit.SetWindowText(あいうえお);
ここからステップインすると、
::SetWindowText(m_hWnd, lpszString);
を呼んでいると思いますが、
チャンとこのSetWindowTextが呼ばれていますか?
また、m_hWndは文字を表示したいエディットのハンドルになっていますか?