editBox = CreateWindow(
  "EDIT",
  "あああ",
  SS_CENTER | WS_CHILD | WS_VISIBLE,
  0,0,100,20,
  hWnd,
  NULL,
  hInstance,
  NULL);


テキストボックスのフォーカスを外すにはどうしたら
いいんですか?
ESCキーでフォーカスを外そうと思ったら、
テキストボックスにフォーカスがあるせいで
case WM_KEYDOWN が動作しません。
フォーカスを外すというソース自体も分かっていません。


 case WM_KEYDOWN:
  if( wParam == VK_ESCAPE )
   ?
 break;

A 回答 (1件)

WM_KILLFOCUS というメッセージがあります。

これをエディットボックスのウィンドウに
送ってあげれば、フォーカスが外れると思います。

# WIN32 API なんて、久しぶりなので、ちょっと自信無し
    • good
    • 0
この回答へのお礼

ありがとうございます。
WM_KILLFOCUS を送ればいいですね。
まだ、msg に WM_KILLFOCUS を送る方法を知らないから
また別の質問で教えてもらおうと思います。

お礼日時:2002/01/18 01:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QWM_CHAR or WM_KEYDOWN の「wParam」について

よくわかっていないのですが、

switch (message)
{
case WM_CHAR:
というところで、wParamから、文字の情報取得して、
HDC宣言して、TextOut関数使用…、の途中で、
wParamの文字情報は、どのようにすれば
TextOut関数に渡せるのでしょうか?
Visual C++を勉強したてで、勉強の成果をと思い、
テキストエディタを作ってみたいと思ったのですが、
さて、どうしたらよいのでしょうか?
エラー内容は、unsigned int → const char *
にできません、ということなのですが、
じゃぁ、型の変換の仕方は?という感じです。
初心者なので、簡単な例をつけて説明してくださると助かります。よろしくお願いします。

Aベストアンサー

TextOut(~, (char*)wParam, ~);

と、char*型に型変換すると良い気がします。

--
TextOut関数の宣言、

TextOut(~, (const char*)szText, ~);

のconstキーワードは、
「TextOut関数に渡したwParamの値をTextOut関数の内部で書き換えることはありませんので安心してね。」
という意味ですので、

unsigned int
long double

などの2つの単語で宣言される「型」とは意味合いが異なります。
ヘルプの説明ですと釈然としませんが、参考URLなどを読んでみてください。

プログラマの正体!? - 誰が為にconst
http://www.asahi-net.or.jp/~vx2t-andu/lets/20020203.html

参考URL:http://www.asahi-net.or.jp/~vx2t-andu/lets/20020203.html

QダイアログのWM_KEYDOWNで処理を実行したい

現在、VC++6を用いて、MFC を使わずにアプリケーションを作っている初心者です。
最終的にはWIN_CEハンディーターミナルで動作させる予定です。

ダイアログにフォーカスがある状態で、"↓"キー入力があった場合に処理を行いたいのですが、
ダイアログ及び親ウインドウにWM_KEYDOWNが発生していないみたいなのです。
(SPY++にて確認しました。)

DialogBox、CreateDialogの両方でやってみたのですがうまくいきません。
なにか良い方法はありますか?
よろしくお願いします。

Aベストアンサー

詳しくないのでトッケンハッケンかもです。

IsDialogMessage関数は使ってますか?
この関数、タブキーが押されるとフォーカスを移したり、
[↓]キーが押されると次のコントロールを選択してくれたり
するっぽいんですが。

リンク先はMSDNのIsDialogMessageのところです。

参考URL:http://www.microsoft.com/JAPAN/developer/library/jpuipf/_win32_isdialogmessage.htm

QWM_PAINTとWM_MOVEで同じ事をしたいけど

VC.NETにて、
ウィンドウプロシージャでWM_PAINTとWM_MOVEを拾って、テキストを書き直す関数に飛ばしているのですが、WM_MOVEでは書き直してくれません。
書き直し関数はウインドウの座標の絶対と相対をGetClientRectとGetWindowRectで得て表示をするだけです。
WM_MOVEでも関数に飛んで、座標を得てはいるようですが、表示しなおしてくれません。
ウインドウの大きさを変えると表示し直してくれます。
何故でしょうか?

Aベストアンサー

>hdc = BeginPaint(hWnd, &paint);
と、
>EndPaint(hWnd, &paint);

これはWM_PAINTの中でしか使用できません。

WM_MOVEで描画を行うのでしたらGetDC()、ReleaseDC()を使用してください。

QWM_SIZEとWM_SIZINGの違い (Win32API)

Windowsプログラミングで、画面のサイズを変更したときに送られてくるメッセージで、
WM_SIZEで処理するのとWM_SIZINGで処理するのとでは何が違うのでしょうか?
WM_SIZEとWM_SIZINGの違いは何なのでしょうか?

また、似たようなものでWM_MOVEとWM_MOVINGの違いも教えてもらいたいです。

Aベストアンサー

実際にプログラムを書いてみれば、両者の違いは明白になるでしょう。

WM_SIZE は「サイズの変更後に」メッセージがアプリケーションに飛んでくるので、
ウィンドウのコーナーからマウスを離した時に文字がビョンと移動します。

Windows98 くらいまではウィンドウのサイズの変更はまずは輪郭だけサイズが変って
マウスをコーナーから離した時にウィンドウの中身が再描画されていたので、
WM_SIZE のメッセージハンドラを実装することになったでしょう。

しかし最近のインターフェイスはサイズ変更中もズリズリとウィンドウの中身が
再描画され続けます。これには WM_SIZING のメッセージハンドラを実装して、
サイズ変更中常に文字列の再描画を繰り返す必要があるでしょう。

QSendMessage(hW,WM_CREATE,0,0);を

SendMessage(hW,WM_CREATE,0,0);
を実行するとシステムがWM_DOWNやWM_CHARを発行しなくなるみたいです
というのはそれ以降キー入力を無視するようになるのです
いったんアプリをアイコン化してウィンドウ化するとWM_DOWNやWM_CHARを発行するようになります
WM_CREATEを送ってもWM_DOWNやWM_CHARを発行しなくなるのを阻止するために何か方法はないでしょうか?

Aベストアンサー

>プログラムのイニシャライズのために送ったのですが送らないで住むプログラムに変更しました

普通はそんな方法はとりません。
システムが何をするか分からないからです。

自分でメッセージを定義して、初期化処理を行うようするためのメッセージを送るほうが無難です。
WM_CREATEと同じ処理を初期化処理として行わせたいのであれば、初期化処理を関数化して自分で定義したメッセージでも呼び出せばいいのですし。


>作ったプッシュボタンを押してシステムがWM_COMMANDを送ってきた後キー関係のメッセージを送ってくれなくなります

プッシュボタンがキーボードフォーカスを持ってのるでは?

ボタンがキーボードフォーカスを持っていてもキー関連のメッセージを親ウィンドウが受け取りたいのであれば、サブクラス化をするしかないでしょう。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報