エディットコントロールの自作 – プログラミング – Home

エディットコントロールの自作
 
通知
すべてクリア

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

固定ページ 1 / 2

Altai
 Altai
(@Altai)
ゲスト
結合: 14年前
投稿: 8
Topic starter  

Win32API VC++2010 Win7home

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

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

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


引用解決済
トピックタグ
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

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

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

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


返信引用
Altai
 Altai
(@Altai)
ゲスト
結合: 14年前
投稿: 8
Topic starter  

ワープロを自作してみようと思ったのですがIMEのところでつまづいてしまって。
とりあえずリンクを参考にさせていただきます。

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


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

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

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

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


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

IME(Imput Method Editor)関連の機能関数群はImm~()系です。

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

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


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

本物より劣るかも

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


返信引用
Altai
 Altai
(@Altai)
ゲスト
結合: 14年前
投稿: 8
Topic starter  

皆さん ありがとうございます。
MFCでなくSDKを使うつもりなのです。

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

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

よろしくお願いします。


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

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


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

typo orz
> これはメインのウィンドウ処理を全く同じ考えです。
これはメインのウィンドウ処理と全く同じ考えです。


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

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

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


返信引用
Altai
 Altai
(@Altai)
ゲスト
結合: 14年前
投稿: 8
Topic starter  

仲澤@失業者さん、ありがとうございます。
ですが使ってみると、入力した時にウィンドウの下で入力が行われます。
どうすればいいのでしょうか?


返信引用
Altai
 Altai
(@Altai)
ゲスト
結合: 14年前
投稿: 8
Topic starter  

maruさん、コントロールの外観を変えたいのですが、
状態を表す変数がどこにあるか分からないので。

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


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

>ですが使ってみると、入力した時にウィンドウの下で入力が行われます。
>どうすればいいのでしょうか?

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

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


返信引用
Altai
 Altai
(@Altai)
ゲスト
結合: 14年前
投稿: 8
Topic starter  

仲澤@失業者さん、まさしくそれです。
ありがとうございます。


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

> ウィンドウロング値の何バイト目にどのような情報が入っているのやら。。。
なんだかなぁ。ヘルプを読めばいいのに。

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

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

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


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました