たびたび申し訳ありません。
実は、OnInitDlgでポインタを使わずに
リストボックスに項目を追加して、
右のマウスボタンでダイヤログが開き、
リストボックスで何かひとつ項目を選んで、
OKボタンを押すと、その選んだ項目が
エディターに表示される、
といったことをしておりまして、
そのリストボックスで選んだ項目をエディター
に表示させるには、どうすればいいかわかりません。
お忙しい中申し訳ありませんが、わかる方教えたいただけない
でしょうか?
まず、m_naniwoとm_donoyouniをコントロール変数で登録して、
DlgクラスのOnInitDlgで以下のようにコードを書き込みました。
BOOL CkihonkeiDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_naniwo.AddString("美しい笑顔");
m_naniwo.AddString("きれいな心");
m_naniwo.AddString("しつこい性格");
m_donoyouni.AddString("すごく好きです");
m_donoyouni.AddString("とても好きです");
m_donoyouni.AddString("まあまあ好きです");
m_donoyouni.SetCurSel(0);
return TRUE;
}
それで、ViewクラスのONRButtonDownで以下のようにしたのですが、
「temp +="私はあなたの" + dlg.m_naniwo;」と
「temp +="を" + dlg.m_donoyouni;」の箇所で引っかかります。
以上2箇所には、何か足りないものがあるのでしょうか?
教えていただきたいのですが・・・
void CMyLoveView::OnRButtonDown(UINT nFlags, CPoint point)
{
CkihonkeiDlg dlg;
dlg.m_keisyo=0;
dlg.m_date=true;
if(dlg.DoModal()==IDOK){
CEdit& edit=GetEditCtrl();
CString temp;
CString x[2]={"さん","くん"};
temp=dlg.m_name+x[dlg.m_keisyo] + "\r\n好きです。 \r\n";
temp +="私はあなたの" + dlg.m_naniwo;
temp +="を" + dlg.m_donoyouni;
edit.SetWindowText(temp);
}
CEditView::OnRButtonDown(nFlags, point);
}
文字列ポインタにCListBoxの加算はできないとおもう。
temp +="私はあなたの" + dlg.m_naniwo.GetWindowText();
かな。
temp +="私はあなたの";
temp +=dlg.m_naniwo.GetWindowText();
にする必要があるかも。
しまった。
void GetWindowText(CString& rString) const;
だから、
一旦CStringにテキストを取得する必要があるな。
CString strList;
dlg.m_naniwo.GetWindowText(strList);
temp +="私はあなたの" + strList;
ダイアログを閉じてしまったら、コントロールにアクセスできないので、
ダイアログ側のOnOKイベントで適当なCStringメンバ変数を用意して格納し、
それを使うようにしては。
何いっているかわからない場合は、入門書から勉強してください。
おっとっと。
> ダイアログを閉じてしまったら、コントロールにアクセスできないので、
> ダイアログ側のOnOKイベントで適当なCStringメンバ変数を用意して格納し、
> それを使うようにしては。
こっちでしたか。
> ダイアログを閉じてしまったら、コントロールにアクセスできないので、
> ダイアログ側のOnOKイベントで適当なCStringメンバ変数を用意して格納し、
> それを使うようにしては。
意味がよくわからないんですが、要は、ClassWizardでIDOKイベント
に変数を追加することでしょうか?
そうした上で、
CString strList;
dlg.m_naniwo.GetWindowText(strList);
temp +="私はあなたの" + strList;
を行うんでしょうか?
http://laboratory.sub.jp/c++/22.html
の
3,ダイアログの変数
を参考にメンバ変数をpublicでダイアログに追加する。
OKボタンを押すイベントはリソースエディタでダブルクリックすれば追加されるので、そこにコードを記入。
いまだにVC++6.0を使っているのか、、、
参考サイトはVC++6.0のものではなかったw
publicとか指定できるのがあったのにないとおもったら
>Microsoft Visual C++ Ver 4.0
orz
http://www.vcppclub.com/kouza/beginner/beginner2.html
の
■ 通常のメンバ変数の追加
を参考に。
使っているのは、vc++Ver6です。
よくわかりません。
ダイアログ側のOnOKイベントってどこを
さすのでしょうか?
ちなみに、今の状態でやったら、
コンパイルは通ったのですが、
実行でエラーになりました。
FILE WINCORE.CPP
Line1074
です。
> ダイアログ側のOnOKイベントってどこをさすのでしょうか?
↓
> OKボタンを押すイベントはリソースエディタでダブルクリックすれば追加されるので、そこにコードを記入。
class CkihonkeiDlg
{
...
public:
CString m_str1; // 追加
CString m_str1; // 追加
...
}
void CkihonkeiDlg::OnOK(/*引数は忘れた*/)
{
m_naniwo.GetWindowText(m_str1);
m_donoyouni.GetWindowText(m_str2);
CDialog::OnOK();
}
void CMyLoveView::OnRButtonDown(UINT nFlags, CPoint point)
{
...
temp +="私はあなたの" + dlg.m_str1;
temp +="を" + dlg.m_str2;
...
}
> CString m_str1; // 追加
> CString m_str1; // 追加
間違い修正
CString m_str1; // 追加
CString m_str2; // 追加
maruさんどうもありがとうございました。
上のエラーの件は、解決しました。
また、ひとつお聞きしたいことがございまして、
今度は、リストボックスで、選んだ項目が
エディターに表示されなくなりました。
なにか設定忘れ戸かあるのでしょうか?
お忙しい中、教えていただきたいのですが・・・
上の表記に誤字がありました。
すみません。
なにか設定忘れ戸かあるのでしょうか?
↓
なにか設定忘れ等があるのでしょうか?
> なにか設定忘れ等があるのでしょうか?
あなたがどこにどんな設定をしているのはわかりませんので、回答しようが有りません。
> 今度は、リストボックスで、選んだ項目が
> エディターに表示されなくなりました。
CkihonkeiDlg::OnOK()のm_naniwo.GetWindowText(m_str1);
でリストボックスで選んだ項目がとれているか、
CMyLoveView::OnRButtonDown(UINT nFlags, CPoint point) で
dlg.m_str1がどうなっているかをデバッガで追って見てください。
>CkihonkeiDlg::OnOK()のm_naniwo.GetWindowText(m_str1);
>でリストボックスで選んだ項目がとれているか、
デバッガで追ってみたのですが、
CkihonkeiDlg::OnOK()のm_naniwo.GetWindowText(m_str1);
のところでは、項目は取れていませんでした。
>CMyLoveView::OnRButtonDown(UINT nFlags, CPoint point) で
>dlg.m_str1がどうなっているかをデバッガで追って見てください。
同じように取れていません。
失礼、別のコントロールと勘違いしてました。
void CkihonkeiDlg::OnOK()
{
int nSel = naniwo.GetCurSel();
if (nSel != LB=ERR)
{
m_naniwo.GetText(nSel, m_str1);
}
CDialog::OnOK();
}
です。
maruさん、本当にどうもありがとうございました。
長い間、お手数おかけしました。
おかげさまでうまくいきました。
本当にどうもありがとうございました。
大変申し訳ないのですが、
ちなみに
>if (nSel!= LB=ERR)
if (nSel!= CB_ERR)
の間違えですよ・・・
> >if (nSel!= LB=ERR)
> if (nSel!= CB_ERR)
> の間違えですよ・・・
おっとっと。ちょっと打ち間違い。
LB_ERRの間違いです。CB_ERRはCCombBoxのエラー。
値は両方とも-1だから間違いじゃないけどね。
HELPをみてね。
ツイート | ![]() |