Win32API VC++2010 Win7home
エディットコントロールを自作してみようと思います。
まず親ウィンドウを作ってからポップアップの子ウィンドウをつくりましたが、
IMEで日本語入力をするにはどうすればいいのですか?
というかウィンドウクラスEDITに関連付けられているプロシージャーの中身が知りたいです。
> IMEで日本語入力をするにはどうすればいいのですか?
この辺かな?
http://msdn.microsoft.com/ja-jp/library/0x02zb6d(VS.90).aspx
> というかウィンドウクラスEDITに関連付けられているプロシージャーの中身が知りた
いです。
中を知ってどうしたいんだろう?っていうか何で自作しようって気になったんだろう。
同じ機能なら自作する必要はないし、エディットコントロール+αなら、サブクラス化だ
と思う、
もしかしてエディットコントロール-β?
同じ機能を自作することでプログラムの勉強したいってことなら、既存の実装をみても
勉強にならんだろうし。
ワープロを自作してみようと思ったのですがIMEのところでつまづいてしまって。
とりあえずリンクを参考にさせていただきます。
ワープロというのはWindows付属のワードパッド見たいなものです。
うーーん、
自作ってリソースを使わずに作りたいとか?
確かに可能ですね。
ただ、VCのMFCのスケルトンがリソースを使うことが前提になっているので
ややこしいかも知れません。
MFCでなく、SDKで空のプロジェクトで作成するかですね。
ここが参考になるかな。
http://homepage2.nifty.com/c_lang/index_sdk.html
僕としては、maruさんの意見どおりにサブクラス化をすすめます。
IME(Imput Method Editor)関連の機能関数群はImm~()系です。
>ワープロというのはWindows付属のワードパッド見たいなものです。
ワードパッドは文字単位でフォントが変えられますが、
まずは、ノートパッドのような単一フォントの物にしといた方が
さまざまな場面で計算などが、やや簡単になりますね。
もっとも、それでもかなりの量のソースコードになりますけど。
皆さん ありがとうございます。
MFCでなくSDKを使うつもりなのです。
maruさんのサブクラス化では
1.どのメッセージを捕まえるべきか
2.そこでどのような処理をすべきか
を教えて欲しいと思います。
仲澤@失業者さん、Imm系の関数は具体的にはどう使えばいいのでしょうか?
1.コンテキストとは何ですか?
よろしくお願いします。
> 1.どのメッセージを捕まえるべきか
> 2.そこでどのような処理をすべきか
それを考えなくていいようにするためにサブクラス化するんです。
コントロールに投げられたメッセージは全て受け取り、自分で処理しないものを
元々ある WNDPROC に処理させる。自分で対応する必要のあるものだけを自分で
処理する。
これはメインのウィンドウ処理を全く同じ考えです。
typo orz
> これはメインのウィンドウ処理を全く同じ考えです。
これはメインのウィンドウ処理と全く同じ考えです。
>仲澤@失業者さん、Imm系の関数は具体的にはどう使えばいいのでしょうか?
>1.コンテキストとは何ですか?
基本的には
(1)IMEコンテキストハンドルを取得
HIMC hImc = ImmGetContext( hWnd);
(2)HIMC を使ってなんかする
ImmSetConversionStatus(
hImc, IME_CMODE_KATAKANA, IME_SMODE_AUTOMATIC);
(3)コンテキストの解放
ImmReleaseContext( hWnd, hImc);
てな感じ。
SDKのサンプルを見るのが一番だとおもいます。
仲澤@失業者さん、ありがとうございます。
ですが使ってみると、入力した時にウィンドウの下で入力が行われます。
どうすればいいのでしょうか?
maruさん、コントロールの外観を変えたいのですが、
状態を表す変数がどこにあるか分からないので。
ウィンドウロング値の何バイト目にどのような情報が入っているのやら。。。
>ですが使ってみると、入力した時にウィンドウの下で入力が行われます。
>どうすればいいのでしょうか?
どうしたいのか書いていただかないと回答しようがありません。
あてずっぽうで書いてみると、変換ウィンドウの位置を変更したいのなら
ImmSetCompositionWindow()を使います。
まぁ、関連関数は50個程度なのでマニュアルで一通り確認してから
質問してみてください。マニュアルの使い方はわかりますよねぇ。
仲澤@失業者さん、まさしくそれです。
ありがとうございます。
> ウィンドウロング値の何バイト目にどのような情報が入っているのやら。。。
なんだかなぁ。ヘルプを読めばいいのに。
Get/SetWindowLong のヘルプを見れば nIndex の値によって何が取得/設定できるかが
書いてあります。その nIndex には数値が書いてあるわけではなく、GWL_STYLE など
のインデックス名が定義されています。その中の各ビットも WS_* で定義済みなので
ユーザが直接指定する必要はありません。
> コントロールの外観を変えたいのですが、
高々外観を変えるためにエディットボックスを作ろうとしているのですか?
そのためのコストとそれによる効果がとても合わないと思うけど。
Window で用意しているスタイル以外の外観を実現しようとするんだったら、自分で描画
コマンドを処理するのかなぁ。