• ベストアンサー

SetWindowTextについて。

C言語でWindowApiのプログラムを行っています。 コンパイラはBorland C++です。 ウィンドウから、右クリックでファイルを開くダイアグラムを開き、 ある文字だけをファイルから読み込み、結果をウィンドウ上に 表示させると言う感じのプログラムを作っています。 そこでですが、 WndProc関数の中の、 GetOpenFileName(&ofn); SetWindowText(hWnd , strFile); と言う部分でファイルダイアログを開き、 ファイル読み込みをしているわけなのですが、 このstrFileを別の関数に渡したいわけです。 そういう時どうすればいいでしょう? また、char型をchar_w型に変換する際に、 WideCharToMultiByte MultiByteToWideChar 関数を用いればいいことがわかりました。 しかし、char_w型は検索しても見つかりません。 この事も何かヒントを教えていただけたらと思います。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.16

ざっと見ただけですが、前に書いたグラフィックを消していないので残っているだけでは? 例えば、文字列"12345”をTextOutで表示して 12345 あとで、同じ場所に文字列"999"をTextOutで表示すると 99945 となっている様に見えます。これは前の文字"45"が残っているためです。これじゃないでしょうか? 方法としては、 (1)文字列の後ろに適当な数の空白を付けてTextOutする。 先ほどの状態の画面で同じ場所に文字列"888  "をTextOutで表示すると 888   となります。 (2)これから文字を書く所を背景色の長方形で塗りつぶしてから文字列をTextOutする。 Rectangleでこれから文字列を書く場所を背景色で塗りつぶしておきます。 私としては(1)より(2)がお勧めです。

noname#142813
質問者

お礼

回答ありがとうございます。 そういう事ではないようです。 修正しましたので、ソース乗せて起きます。 http://onegaisimasune.web.fc2.com/main2.txt

すると、全ての回答が全文表示されます。

その他の回答 (15)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.5

> WINAPI(LPCTSTR str); > としたいのですが、うまく行かないみたいです・・・ WINAPIがマクロだからでしょう。 どうしてもWINAPIという名前の関数を作りたいのであれば、 #undef WINAPI としておけば、WINAPI関数を作れるようになると思いますが、決してお勧めはしません。

noname#142813
質問者

お礼

マクロだと無理でしょうねぇ・・・

すると、全ての回答が全文表示されます。
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.4

>GetOpenFileName(&ofn); >SetWindowText(hWnd , strFile); >と言う部分でファイルダイアログを開き、 >ファイル読み込みをしているわけなのですが、 この2行だとファイル名を文字列として得て、それをウィンドタイトルに表示しているだけです。strFileは、GetOpenFileNameの戻り値ですよね?これだけだとファイルの中身を読み込んではいませんよ。 言葉が混乱されているようですが、ファイル名=文字列、ファイルの中身=テキスト(文字列)データなどがごっちゃになっていませんか? >このstrFileを別の関数に渡したいわけです。 >そういう時どうすればいいでしょう? 文字列ですので、普通に関数パラメータとして受け渡してください。 それとも、ファイルを読み込んでファイルの中身を渡したいのでしょうか?

noname#142813
質問者

お礼

File名を取得して、 "file.txt"の部分を置き換えたいのです。 ファイルから読み込むプログラムはできあがっております。

すると、全ての回答が全文表示されます。
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

★この質問を立てる前に前の質問を解決する努力をして下さい。 ・前の質問にまた回答を書き込みましたので補足して下さい。  http://oshiete1.goo.ne.jp/qa3364459.html→『ファイルを開く。(API・C言語)』 >ある文字だけをファイルから読み込み…  ↑  これは C 標準関数の fopen、fclose を使っているようですね。  だから char型、wchar_t型の変換を行いたいのですよね?  もしかしたら前々回の質問も同じ理由でしたか?  http://oshiete1.goo.ne.jp/qa3342727.html→『char型の文字列をウィンドウに表示させる。』  この3つの質問は全部同じ意味合いですよね。  重要なのは TCHAR、LPTSTR型の意味を理解することです。 解決策1: ・コンパイルのオプションより UNICODE を定義しない設定にします。  総合環境を使っているのか、コマンドラインからオプションを指定しているのかは  こちらでは分かりませんが、UNICODE を定義しない設定でコンパイルして下さい。 ・こうすると TCHAR、LPTSTR型は char 型に置き換えられますので C 標準関数との  やりとりで char型 と wchar_t型 の相互変換をしなくてもすみます。  この方法をお勧めします。 解決策2: ・コンパイルのオプションより UNICODE が定義されていたらば  wchar_t 型から char 型に変換する仕組みをとります。  変換方法は MultiByteToWideChar() 関数で行えます。  あと検索時は『wchar_t』型です。  既に回答がありますが、前回の質問の aris-wiz さんのはちょっとした記述ミスです。  正しくは『wchar_t』型になります。 以上。UNICODE 定数についての理解度を補足して下さい。先に進みませんから。

参考URL:
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpintl/html/_win32_widechartomultibyte.asp
すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

> 引数として渡す方法がちょっとわかりませんね・・・ どう分からないのでしょうか? void func(LPCTSTR str); に対して func(strFle); とするだけだと思いますが...

noname#142813
質問者

お礼

ありがとうございます。 WINAPI(LPCTSTR str); としたいのですが、うまく行かないみたいです・・・

すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

> このstrFileを別の関数に渡したいわけです。 > そういう時どうすればいいでしょう? 引数として渡せばよいだけでは? > しかし、char_w型は検索しても見つかりません。 char_w型ではなく、wchar_t型ではないでしょうか?

noname#142813
質問者

お礼

回答ありがとうございます。 引数として渡す方法がちょっとわかりませんね・・・

すると、全ての回答が全文表示されます。

関連するQ&A