• ベストアンサー

SDI形式での直接文字表示の方法について

こんにちは、前に一度書いたものです。日数が経ってしまってすいませんでした。 今悩んでることを率直に聞いてみたいと思います。よろしくお願いします。 今SDI形式でタイピングソフトを作っているのですが、お題が表示され、その下に文字を書きこんでいくという画面でお題となる文字列を表示させるのは簡単なんですが、その下に直接文字を打ちこんでいくという作業がどうやっていいかわかりません。どんな関数を使っていいのかもわからないのでできれば詳しく教えてください。自分の中の考えでこの問題を解こうと考え付いたことはSDIからその画面だけダイアログを表示させてそこに入力させて、SDIにまた戻ってくるということなのですが、これが実現可能なのかとういことを今調べているのですが中々すすみません。そして、やはり文字列の直接入力はSDIでは難しいのでしょうか?

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

  • ベストアンサー
  • alfeim
  • ベストアンサー率58% (114/195)
回答No.1

文字を描画するのは DrawText() DrawTextEx() TextOut() などのAPIを使えば大丈夫でしょう。 色、大きさ、フォントなどを変えたい場合はデバイスコンテキストの操作をする必要があります。ここで全部を書けるほど簡単な処理ではないので本屋さんなり図書館なり行って書籍を当たりましょう。 「Win32アニメーションプログラミング」や「Inside VisualC++」(ちょっと高いか)、「Inside Windows」当りがいいんじゃないでしょうか? 文字の取得は深く考えないならWM_CHARメッセージのハンドラで処理を書き、キーリピートの防止など、いろいろ細工を施すのであればWM_KEYUPやWM_KEYDOWNなどのハンドラで処理すれば大丈夫だと思います。 MFCベースで作られているのであればViewクラスのそれぞれのメッセージハンドラで引数として渡されてきます。 上記の方法では文字列ではなく押された文字やキーが帰るだけですので受け取った入力をもとに文字列に直す必要があります。

その他の回答 (1)

  • uyama33
  • ベストアンサー率30% (137/450)
回答No.2

あまり参考にはならないかも知れませんが、 同じようなことがあったので書きます。 1.エディットコントロールと同じようなものを自分で作ろうとしました. 2.イベントハンドラーのなかでキーイベントを取り出し処理しようとしたのですが、アルファベットの処理はできるのですが、漢字変換が上手くできません。 文字カーソル(キャレット)の場所を制御できなかったのです。 3.使っていたFEPはエイトクでした。 4.ジャストシステムのホームページにFEPを使って漢字変換するときに必要となる DLLがあります。 5.このDLLを使えばできると思います。

関連するQ&A

  • SDIアプリ内からもう一つSDIを作成する方法

    開発環境:WindowsXPSp3 + VC++2010 SDIの単純なアプリケーションと、スタティックリンクしているDLL(拡張DLL)があります。 exeのツールバーにあるボタンをクリックすると、DLL内にあるCreateNewWindowという関数を呼ぶようになっています。 このCreateNewWindowでは以下のようなコードが書かれています。 ------------------------------------------------------------------ CSingleDocTemplate* g_pNewWnd ; // グローバル void WINAPI CreateNewWindow() {   if( NULL == g_pNewWnd ) {     g_pNewWnd = new CSingleDocTemplate(       IDR_NEWWINDOW,       RUNTIME_CLASS( CSDIWndDoc ),       RUNTIME_CLASS( CSDIWndFrame ),       RUNTIME_CLASS( CSDIWndView )     );     CDocument* pDocumanet = g_pNewWnd->OpenDocumentFile( NULL ) ;   } } ※初期化や破棄処理は適宜行っているものとします。 ------------------------------------------------------------------ このように、Exeのほうに1つのSDIが存在している状態で、さらにDLL内で別のSDIのウィンドウを作成することは許されるのでしょうか? 実行すると、一応、ウィンドウは作成されるのですが、これらのフレーム内でCMFCToolBarを作成すると、DLLのこの関数でSDIを作成した時点でexe側のツールバーがおかしくなります。 具体的にはDLLのリソースにあるツールバーがexeのツールバーとして不完全な状態で反映され、DLLで作ったSDIウィンドウでは、ツールバーの領域だけ確保されてなにも無い状態です。 この関数を実行するまではexeのツールバーは正常に表示・動作しています。もちろん、リソースIDがユニークになているのは確認済みです。 やりたいことは、SDIやダイアログなどからボタンを押したら動的にSDIのウィンドウを生成して提供するDLLを作成したいのです。 参考になるサイトや書籍、アドバイスを頂けませんでしょうか。 よろしくお願いします。

  • ダイアログへ文字列を表示させる方法(API)

    TCHAR s[80] = "Test"; MessageBox(NULL, s, "題名", MB_YESNO); としてダイアログを表示させるのと同じように、 ダイアログボックスをリソースエディタで作成し 作成したダイアログ内に、文字列を表示させるには どのようにしたら良いでしょうか? 作成したダイアログは、MessageBox関数で作成されるものと同じ。 表示させたい文字列は、MessageBox関数の第2パラメータのTCHAR型変数sと同じ。 ダイアログ内の表示させたい所の識別子は、IDC_STATIC。 MS VC++ & Win98 の環境で作成してます。

  • エクセル セルの表示形式「文字列」だけを抽出したい

    エクセル2007を使用しています。 A列に数字が入力されていますが、そのセルの表示形式は、「標準」「数値」「文字列」とバラバラです。 この「文字列」のセルだけを抽出したいのです。 例えば、関数などを利用して、B列に表示するなど。 よろしくお願いします。

  • SDIのコントロールを隠す

    Visual C++ .NET2003で勉強中の初心者です。 参考書を見ながらSDIでプログラムを作成しています。 いろいろコントロールをつけたりしているのですが, メニュー等を使用しておらず,ダイアログベース で作成したプログラムみたいですが配布を考えています。 以下について教えてください。 ・不要な(まだ使用していない)メニューやツールバーを 非表示するにはどうするのがベストでしょうか? ダイアログベースのような画面にしたいです ・作成したコントロールを無効(見えない動かない)にするにはどうすれば良いのでしょうか? 配布時は無効,個人的に利用するときは有効としたいので,削除できません。 よろしくお願いします。

  • valueの非表示の方法

          A                B 1  20090505     =DATEVALUE(TEXT(A1,"0!/00!/00")) 2  20090506     ↓以下コピー 3  20090507          平成21年5月6日 4                  #VALUE 5 #VALUE A列は日付の入力のしやすさでそのようにしてます。印刷時は不要ですので非表示です。B列に=DATEVALUE(TEXT(A1,"0!/00!/00"))を下までコピーしたんですが、 エラー表示になってしまいます。A列に何も入力してないので当たり前ですが。条件付き書式で文字色を変えてやればエラー表示が見えなくなるのですが、 A4に20090508と入力してもいちいち文字色を変えてやらなければなりませんよね? でIF関数とISERROR関数でA列に何も入れてないときにB列でエラーを表示させないためにはどのようにすればよいのでしょうか? いろいろやってみたんですがどうしてもできません。 どなたか教えて下さい。おねがいします!

  • 表示されている文字列を取得するエクセル関数

    例えば、 A1セル「平成28年1月5日」(シリアル値で入力) A2セル「H28.1.5」(シリアル値で入力) A3セル「12345」(数値) と入っている場合に、 関数を使って、 B1セル「平成28年1月5日」(文字列) B2セル「H28.1.5」(文字列) B3セル「12345」(文字列) と表示させることはできるでしょうか? 形式を選択して貼り付け、とか、VBAでできるのはわかるのですが、 関数だけで(しかも、できれば汎用的な形の関数で) 実現できるのかが知りたいです。

  • VBAで文字列検索の方法

    エクセルで実現したいVBAです。 セル内に入力されている文字列に任意の文字が含まれているかどうかを判定したいのです。 例えば, 「特別値引対応商品」と入力されているセルに 「値引」という文字が含まれているかどうか のチェックをしたいのです。 検索する文字列(上記の場合なら「値引」)は固定でかまわないのですが,どのようにすれば実現できるでしょうか。 関数を探してみたのですが,ないように思います・・・。

  • 同じ文字であれば ● を表示したい Excel

    エクセルで A1=あ B列 あ い う え と入力されていて A1の文字がB列にあれば ● とC1に表示したいです。 なければ空欄! 関数ですよね? おわかりの方教えてくださーい!

  • エクセルの表示形式変更につきまして。

    お伺いいたします。 Office2000と2003を使用しております。 VLOOKUP関数の参照先シートと入力元シートの表示形式が異なっていると、#N/A のエラーになってしまいます。 (参照先が文字列・入力元が数値となっております。) これを直す為に、入力元の表示形式を文字列に直しても、すべて再度入力を行わないと、表示がされません。 再度入力せずに、これを解決するような事は出来ませんでしょうか? どなたかご教授お願い致します。

  • 複数行の入力を受け取る方法

    wshのアプリをvbscriptで書こうと思っています。 vbscriptのinputbox関数は1行しか文字列を入力できませんが、複数行の入力を可能にするようなダイアログを表示する方法はないでしょうか。 すみませんが教えてください。

専門家に質問してみよう