エディットコントロールの自作

[戻る]
Altai 2010/12/21(火) 17:28:11
Win32API VC++2010 Win7home

エディットコントロールを自作してみようと思います。

まず親ウィンドウを作ってからポップアップの子ウィンドウをつくりましたが、
IMEで日本語入力をするにはどうすればいいのですか?

というかウィンドウクラスEDITに関連付けられているプロシージャーの中身が知りたいです。

maru 2010/12/21(火) 17:52:48
> IMEで日本語入力をするにはどうすればいいのですか?
この辺かな?
http://msdn.microsoft.com/ja-jp/library/0x02zb6d(VS.90).aspx

> というかウィンドウクラスEDITに関連付けられているプロシージャーの中身が知りた
いです。
中を知ってどうしたいんだろう?っていうか何で自作しようって気になったんだろう。
同じ機能なら自作する必要はないし、エディットコントロール+αなら、サブクラス化だ
と思う、
もしかしてエディットコントロール−β?

同じ機能を自作することでプログラムの勉強したいってことなら、既存の実装をみても
勉強にならんだろうし。

Altai 2010/12/21(火) 18:46:35
ワープロを自作してみようと思ったのですがIMEのところでつまづいてしまって。
とりあえずリンクを参考にさせていただきます。

ワープロというのはWindows付属のワードパッド見たいなものです。

ITO 2010/12/22(水) 10:59:56
うーーん、
自作ってリソースを使わずに作りたいとか?
確かに可能ですね。
 ただ、VCのMFCのスケルトンがリソースを使うことが前提になっているので
ややこしいかも知れません。
MFCでなく、SDKで空のプロジェクトで作成するかですね。

ここが参考になるかな。
http://homepage2.nifty.com/c_lang/index_sdk.html

僕としては、maruさんの意見どおりにサブクラス化をすすめます。

仲澤@失業者 2010/12/22(水) 12:43:25
IME(Imput Method Editor)関連の機能関数群はImm〜()系です。

>ワープロというのはWindows付属のワードパッド見たいなものです。

ワードパッドは文字単位でフォントが変えられますが、
まずは、ノートパッドのような単一フォントの物にしといた方が
さまざまな場面で計算などが、やや簡単になりますね。
もっとも、それでもかなりの量のソースコードになりますけど。

ITO 2010/12/22(水) 14:54:03
本物より劣るかも

WORDPAD サンプル
http://msdn.microsoft.com/ja-jp/library/51y8h3tk(v=vs.80).aspx

Altai 2010/12/22(水) 15:59:11
皆さん ありがとうございます。
MFCでなくSDKを使うつもりなのです。

maruさんのサブクラス化では
1.どのメッセージを捕まえるべきか
2.そこでどのような処理をすべきか
を教えて欲しいと思います。


仲澤@失業者さん、Imm系の関数は具体的にはどう使えばいいのでしょうか?
1.コンテキストとは何ですか?

よろしくお願いします。

maru 2010/12/22(水) 16:36:58
> 1.どのメッセージを捕まえるべきか
> 2.そこでどのような処理をすべきか
それを考えなくていいようにするためにサブクラス化するんです。
コントロールに投げられたメッセージは全て受け取り、自分で処理しないものを
元々ある WNDPROC に処理させる。自分で対応する必要のあるものだけを自分で
処理する。
これはメインのウィンドウ処理を全く同じ考えです。

maru 2010/12/22(水) 16:37:56
typo  orz
> これはメインのウィンドウ処理を全く同じ考えです。
これはメインのウィンドウ処理と全く同じ考えです。

仲澤@失業者 2010/12/22(水) 16:47:00
>仲澤@失業者さん、Imm系の関数は具体的にはどう使えばいいのでしょうか?
>1.コンテキストとは何ですか?

基本的には
(1)IMEコンテキストハンドルを取得
    HIMC    hImc = ImmGetContext( hWnd);
(2)HIMC を使ってなんかする
  ImmSetConversionStatus(
           hImc, IME_CMODE_KATAKANA, IME_SMODE_AUTOMATIC);
(3)コンテキストの解放
  ImmReleaseContext( hWnd, hImc);
てな感じ。
SDKのサンプルを見るのが一番だとおもいます。

Altai 2010/12/22(水) 17:11:58
仲澤@失業者さん、ありがとうございます。
ですが使ってみると、入力した時にウィンドウの下で入力が行われます。
どうすればいいのでしょうか?

Altai 2010/12/22(水) 17:17:09
maruさん、コントロールの外観を変えたいのですが、
状態を表す変数がどこにあるか分からないので。

ウィンドウロング値の何バイト目にどのような情報が入っているのやら。。。

仲澤@失業者 2010/12/22(水) 17:49:54
>ですが使ってみると、入力した時にウィンドウの下で入力が行われます。
>どうすればいいのでしょうか?

どうしたいのか書いていただかないと回答しようがありません。

あてずっぽうで書いてみると、変換ウィンドウの位置を変更したいのなら
ImmSetCompositionWindow()を使います。
まぁ、関連関数は50個程度なのでマニュアルで一通り確認してから
質問してみてください。マニュアルの使い方はわかりますよねぇ。

Altai 2010/12/22(水) 17:53:03
仲澤@失業者さん、まさしくそれです。
ありがとうございます。

maru 2010/12/22(水) 18:47:44
> ウィンドウロング値の何バイト目にどのような情報が入っているのやら。。。
なんだかなぁ。ヘルプを読めばいいのに。

Get/SetWindowLong のヘルプを見れば nIndex の値によって何が取得/設定できるかが
書いてあります。その nIndex には数値が書いてあるわけではなく、GWL_STYLE など
のインデックス名が定義されています。その中の各ビットも WS_* で定義済みなので
ユーザが直接指定する必要はありません。

> コントロールの外観を変えたいのですが、
高々外観を変えるためにエディットボックスを作ろうとしているのですか?
そのためのコストとそれによる効果がとても合わないと思うけど。

Window で用意しているスタイル以外の外観を実現しようとするんだったら、自分で描画
コマンドを処理するのかなぁ。

ryo 2010/12/22(水) 19:09:24
>ワープロを自作してみようと思ったのですがIMEのところでつまづいてしまって。
とあるので
外観「も」変えたいだけで、それだけが目的ではないと思います。

最終的に単体のソフトが作りたいのか、コントロールとして作りたいのか
はっきりしてないが・・・
最初に
「ワードパッドみたいなソフトを自作するため、
エディットコントロールを参考にしたいが
中身をどうやって調べればいいか」
とでも「最終的な目的」がつけてあれば、
もうちょい話はスムーズだったとは思います・・・

Altai 2010/12/22(水) 20:09:18
maruさん
>なんだかなぁ。ヘルプを読めばいいのに。
ボタンのウィンドウプロシージャセットしたであろう値のことです。
例えばlunaスタイルの何秒マウスが上にあるかなどの値などです。

ryoさん
まあそうなのですが、美しい(not Luna)UIのアプリを作りたいもので。

Altai 2010/12/24(金) 10:25:55
ボタンコントロールが完成しました
http://youspage.ktkr.net/~Altai/ycc.zip

古いスレッドには追加発言できません。