• 締切済み
  • すぐに回答を!

子ウィンドウの操作について(VC++)

Windows98 Visual C++6.0 雛型でMDIを作成して、アクティブな子ウィンドウに記述されている文字列を操作したいと思っています。 ダイアログボックスを表示して、その中のボタンを押したら、アクティブな子ウィンドウから文字列を取得しある処理した結果をダイアログボックスのtextに表示したいと考えています。 今のところダイアログボックスを表示する所まで出来ています。 問題点は 1.アクティブな子ウィンドウのハンドルはどのようすれば取得できるのでしょうか? 使用すべき関数名等を教えてください。 2.アクティブな子ウィンドウに記述されているデータを取得するには、GetWindowTextやsendMessageで出来るのでしょうか?(なるべくならSJISで処理をしたいと考えているのですが。) わかりずらい質問かも知れませんが宜しくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数1017
  • ありがとう数0

みんなの回答

  • 回答No.2

GetWindowText()を呼び出せばいいのでは。 CString strTitle; CMDIChildWnd *pChild=(CMDIChildWnd*) pFrame->GetActiveFrame(); pChild->GetWindowText(strTitle); http://msdn.microsoft.com/ja-jp/library/db50wx7h.aspx

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • 他アプリケーション’(ウィンドウ)のハンドル取得方法

     GetWindowTextを用いて、他ウィンドウ、他アプリケーション内のテキストボックスに表示されている、文字列を取得したいです。他アプリケーションは、自分のアプリケーションから、shell関数を用いて起動します。他ウィンドウのハンドル値は、shellの返り値でわかるのですが、テキストボックスのハンドル値が分かりません。 どなたか、 ご教授願います。 おねがいします。

  • ウィンドウ上の描画文字列の取得

    他アプリケーション画面上の文字列を取得したく、調べています。 スクロールつきテキストエリア風なのですが、「描画」されているのか GetWindowTextやWM_GETTEXTで取れるのは "output window"。 ソフトをいくつか試したところ、だいたい同様だったのですが NNScanTextのスキャンモードで画面上の文字列を取得できました。 再描画で、描画文字列&位置を取得しているとのこと・・・ ウィンドウまわりの知識がないなりに、GDIなど思いつく限り調べて みたのですが、その方法にたどりつけません。 教えていただけないでしょうか;; > NNScanText http://www.vector.co.jp/soft/winnt/util/se271444.html

  • 文字コード変換

    SJISで取得したダブルバイト(日本語)の文字列を EUCで表示したいのですが どのようにすればSJISの文字列をEUCの文字列に変換することができるのでしょうか?

    • 締切済み
    • PHP
  • 回答No.1

1.アクティブな子ウィンドウのハンドルは CFrameWnd::GetActiveView()で取得できます。 2.アクティブな子ウィンドウに記述されているデータを取得するには  これはビューの作り方によりけりです。またコンパイル時にUnicodeを選択しなければSJISで取得できるのが普通だと思います。

共感・感謝の気持ちを伝えよう!

質問者からの補足

回答してくれて、ありがとうございます。 現在は、 CMDIFrameWnd *pFrame=(CMDIFrameWnd*)AfxGetApp()->m_pMainWnd; //アクティブなMDI子ウィンドウを取得する CMDIChildWnd *pChild=(CMDIChildWnd*) pFrame->GetActiveFrame(); //アクティブなMDI子ウィンドウに結びつけられているアクティブなビューを取得する CTestEditView *pView=(CTestEditView*)pChild->GetAcitveView(); で データがCTestEditView->m_pShadowBufferにあるのを発見したのですが、 これを取得しようとしたら、protectedメンバで宣言されているらしく、C2248のエラーが出てしまいました。 で、Afxext.hを書き換えるのは嫌だったのですが、 protected: int m_nTabStops; LPTSTR m_pShadowBuffer; .... ... を public: LPTSTR m_pShadowBuffer; protected: int m_nTabStops; UINT .... ... に書き換えたにも関わらず、C2248のエラーが出てしまいます。現在のところ全くわかりません。何か助言をお願いします。

関連するQ&A

  • ちょっと質問を変えてみました。

    以前にテキストエディタを作成して、問題が発生したと質問をしたものですが、内容を少し変えて質問をさせていただきます。 現在MDIでのテキストエディタを作成中なのですが、このソフトに文字列検索機能をつけたいと考えています。 そして自分で一応はプログラムが組めていますが、一箇所だけ理解不能な部分が現れました。 例えば、エディットコントロールに、「goo  goo  goo」とこのように記述されているとします。 そのときに文字列検索で「goo」と検索した場合、自分のプログラムでは3回「次を検索」のボタンを押すと「最後まで検索しました」とメッセージボックスで表示されました。 またどんな文字列がエディットコントロールに記述されたとしても、検索文字を発見された個数分検索を行い最後にメッセージボックスが表示されます。 よって動作としては完璧なのですが、表示に問題が発生しました。 「次を検索」のボタンを押しても、検索対象文字列(エディットコントロールに記述されている文字列)が選択状態にならないのです。 以下に選択状態にするためのプログラムを記述します。 (1)クライアントウィンドウ内でZオーダーがトップ(一番手前に表示されている)のドキュメントウィンドウハンドルを取得。 (2)そのドキュメントウィンドウの子ウィンドウにあたるエディットコントロールハンドルを取得。 (3)そのエディットコントロールハンドルに向けてSendMessage(エディットコントロールハンドル, EM_SETSEL, 検索された文字列の先頭位置, 検索された文字列の最後の位置); を行う。 この手順により検索された文字列を選択状態にしているのですが、表示としては選択状態になりません。何が間違えているのでしょう? ちなみに表示はされないだけで、何かしら選択状態にはなっているのか?と疑問を持ったため、上の手順の後に下のプログラムを記述してみました。 SendMesssage(エディットコントロールハンドル, EM_GETSEL, (WPARAM)&Start, (LPARAM)&End); このプログラムを実行した場合、上で一応選択状態にした文字列(ディスプレイ上では選択状態には見えない)の開始位置と終了位置が正確にStartとEndに格納されました。 EM_GETSELは現在選択されている文字列の開始位置と終了位置を取得するメッセージであるためエディットコントロール内の検索された文字列は選択状態になっているといえます。 しかしディスプレイ上では選択状態として表示がされません。なぜ表示されないのでしょう? ちょっと大雑把に説明してしまいましたが、質問があれば返信を行いますので、よろしくお願いします。

  • ??いきなり「メッセンジャーサービス」というウィンドウが立ち上がる

    何もしてないのに、いきなり「メッセンジャーサービス」というウィンドウが立ち上がり、文字化けした文字列が表示されます。いまも「○○から○○へのメッセージ」といって、文字化けした文字列が表示されました。毎回驚かされるので迷惑です。どーすればいいですか?パソコンは友人のをそのままもらっており細かい設定等は分かりません。OSはXPを使ってます。

  • VC++2005のeditコントロールについて

    仕事でVB6.0とFortran77を使っており、今後のためにVC++2005を独学で勉強し始めたのですが、 練習がてらVBでいうTextBoxを使って簡単な計算をしようと思っているんですがうまくいきません。 目標としては2つのeditコントロールに数値をそれぞれ入力し、その2つの数字を足し算するというもの作ろうと思っています。 今のところ、GetWindowText()ってのを使って文字列(CString)を取得することは出来たのですが、 数字(Intなど)を取得することが出来ず、また文字列を整数などに変換する方法もわからない状態です。 MSDNやネットでキーワード検索しても求める情報が見つからず困っております。 どうすればいいのでしょうか?

  • GetWindowTextの使い方

    PocketPC2003を使ってアプリを使っているのですが エディットボックスに入力された文字列を 取得する方法が分からず困っております。 エディットボックスに対して、classwizardで CEdit型のm_zip変数を作成しました。 そこで、 CString buf; m_zip.GetWindowText(cs_buf); という所までは分かったのですが、これを char型の文字列にコピーしたいのですがどうすれば よいのでしょうか?。 開発環境は、 eMbedded Visual C++ 4.0です。

  • 親ウィンドウから子ウィンドウのテキストボックスに。。。

    おはようございます。 困っています。 AというウィンドウにてJavaScriptから新しく開いたBという子ウィンドウにある document.myForm.textbox.value に任意も文字列「あああ」と表示させたいとするとどう書けばいいでしょうか? フレームであれば、parent.headarea.~をつければいけますが・・・。 Bウィンドウは「win1」というウィンドウです。 BにJavaScriptを書くのではなく、開いたAに書きたいのですが。。。 宜しくお願い致します。

  • 文字列のバイト数を取得したい

    処理中に渡ってくる文字列のバイト数を取得したいのですが、 そういった関数はありませんでしょうか? 探しても見つかりませんでした。 文字列はUTF-8かSJISで渡ってきますので、両方に 対応していると嬉しいです。 対応していなければ渡ってくる前に文字コードを 変換します。 どなたかご教示下さい。

    • ベストアンサー
    • PHP
  • 同一セル内に関数と文字列を同居させるには?

    関数を含むセルに、関数以外のモノを表示させるには どのように記述すればよいのでしょうか。 同じセル内に、"文字列"+"関数で取得した文字列"+"文字列"を表示させたいのです。 ご存知の方がいらっしゃいましたら、教えていただけると嬉しいです。 よろしくお願いします。

  • javascriptでの文字列操作

    こんにちは。 javascriptでの文字列操作で躓いてしまったのでご教授ください。 例えば、 var str = "00000"; という文字列があったとして、これの2文字目を”1”に変更したいといった場合、javascriptではどのように操作するのが簡単でしょうか。 phpですと、 $str = "00000"; $str[1] = "1"; といった記述で操作できた記憶があるのですが、調べてみても同様の操作が見当たらず・・・。 文字列を分割して+で足すような感じの処理か、配列にして繰り返し処理といった感じになってしまうのでしょうか。 宜しくお願い申し上げます。

  • VC++におけるCStringの変換

     VisualC++6.0において、CStringというオブジェクトがありますよね。  たとえば、Edit->GetWindowText(str);  などで、strにEditのさす文字列を入れたりして、そのあとにstrを使って算術演算をするときにどうしてもstrをintかlong型に直したいのです。  キャストの仕方がよくわからないので、知っている方教えてください。よろしくお願いします。

  • VC++2010 リサイズの謎・・

    VC++2010 リサイズについてなんですが、 あるエディットボックスに文字列を表示させていたんですが、 ↓↓↓↓↓↓↓↓↓↓ r,r49 r,s,58 r,s,100 ウィンドウ全体のサイズを少しでも変えると(リサイズすると) ↓↓↓↓↓↓↓↓↓↓ r,r,49 r,s,58 r,s,100 で表示されてしまい、今まで表示されて改行されていたのが横ぞろいになって困っています。 どうすればリサイズしても前のまま(改行されるやつ)にできますか? よろしくお願いします。