So-net無料ブログ作成
  • ブログをはじめる
  • ログイン

本のベストセラー

Windows95 APIバイブル〈2〉コモンコントロール、メッセージ編 [プログラミング]

シリーズ2冊目ではコモンコントロールとメッセージの解説をする
Win32環境で、VC++2.2で検証され、VC++4.0日本語版で確認されたもの
OSはWindows95、NT3.51

1.コモンコントロール
コモンコントロールは、Windows標準の概観と操作性をあたえるもの、以下のようなものがある

ツールバーとステータスウィンドウ
プロパティシート、ウィザード、タブコントロール
イメージリスト
リストビューとドラッグリストボックス
ツリービュー
リッチエディットコントロール
ツールヒントコントロール、スピンボタンコントロール、ホットキーコントロール
トラックバー(スライダ)プログレスバー、ヘッダーコントロール、アニメーションコントロール
ページ設定

コモンコントロールのほとんどはコモンコントロールライブラリというダイナミックリンクライブラリ(COMCTL32.DLL)に実装されている
リッチエディットコントロールの一部はRICHED32.DLLに実装されている
実際に使う前にはInitACommonControls()関数でメモリにロードする

使い方は他のウィンドウクラスと同じだが、イメージリストは他のコモンコントロールで使われる記憶コンテナ

各コントロールの説明

2.コモンダイアログ
標準の「ファイルを開く」「ファイル名をつけて保存」「印刷」「ページ設定」「色の設定」「フォントの指定」「検索」および「置換」をもつダイアログボックス
作成方法は、アプリケーションが構造体に情報を取り込み、その構造体をダイアログボックスを作成する関数に渡す。
ダイアログボックスのタイプによって対応する構造体と関数が違う
色の設定ならChooseColor()関数とCHOOSECOLOR構造体

ダイアログボックスをカスタマイズしたいときには、
フック関数・・・メッセージと通知をダイアログボックスプロシージャにディスパッチされるまえに受け取り処理をすることができる
ダイアログテンプレート・・・ディフォルトのダイアログテンプレートを書き換えたり、他のものと置き換えたりする、しかしこれをすると概観と操作性の統一がくずれるおそれがあるので基本的に使わない

コモンダイアログが処理する登録メッセージ一覧
ヘルプを補足する方法


3.ツールバーとステータスウィンドウ
画面の上のほうでアイコンが並んでいるやつがツールバー
一番下でメニュー項目のヘルプやカーソルの位置などを表示するもの
すべてのアプリが特定の機能に共通のボタンを割り当てることで操作性が統一される。また、ヒントによってボタンの意味をしらなくても目的を把握できる。

ツールバーをつくるにはCreateToolbarEx()を使う、これはボタンがないので追加する
ツールバーボタンにはツールヒントをつくることができる
ステータスウィンドウの作成は
CreateStatusWIndow()か、CreateWIndowsEx()でSTATUSCLASSNAMEを指定する

各アクションに対するメッセージの解説


4.タブコントロールとプロパティシート
限られた画面スペースに最大限ウィンドウを表示するための仕組み
タブコントロールは一つの領域に複数のページを定義してタブの部分をクリックして切り替える
作成はCreateWindowsEx()でWC_TABCONTROLを使う
その前にInitCommonControls()でDLLをよびだしておくこと。

オブジェクトのプロパティを変更するために使うタブコントロールシート
作成 CreatePropertySheetPage()関数
アクションに対するメッセージ解説
ウィザード・・・特別なタイプのプロパティシート


5.イメージリスト
コントロールではなく、同一サイズのイメージの集まり
マスク・・・2つのビットマップ、カラーとモノクロ、透明領域がある
非マスク・・・1つのカラービットマップを含む1つまたは複数のイメージ、上書きする

イメージの作成
InitCommonControls()でDLLをよびだしておく
ImegeList_Create()を使う
または
ImageLIst_LoadBitmap()
ImageLIst_LoadImage()
ImageLIst_Load()
いずれかを使う
使い終わったらImageList_Destroy()で破棄する
追加 ImageList_Add() マスクビットマップならImageList_AddMasked()
アイコンやカーソルの追加 ImageList_AddIcon()
修正 ImageList_Replace()またはImageLIst_ReplaceIcon()
削除 ImageList_Remove() ImageList_RemoveAllマクロもある
結合 ImageList_Merge()

特定のデバイスコンテキストに描画
ImageList_Draw() ImageList_DrawEx()
色の指定もできる

ドラッグ
イメージリストにWM_MOVEMOUSEを受け取るとカーソルの明滅なしにドラッグできる
ImageList_BeginDrag() ImgageList_DragMove() ImageList_EndDrag()
カーソルを消す方法など

6.リストビューとドラッグリスト
リストビュー・・・リストボックスにアイコンを表示したもの
ドラッグリスト・・・リストボックスでドラッグアンドドロップ操作をサポートしているもの

リストビュー作成・・・nitCommonControls()でDLLをよびだしておく、CreateWindowsEx()でWC_LISTVIEW指定
追加、削除、配置の操作ができる
表示モードは、大きいアイコン、一覧、詳細、小さいアイコン

ドラッグリストの作成・・・標準のリストボックスをつくり、MakeDragList()でドラッグリストに変換(サブクラス化)する

7.ツリービュー
親子関係にあるデータを表示するとき使う。ファイルやフォルダなど

作成
nitCommonControls()でDLLをよびだしておく
CreateWindowsEx()でWC_TREEVIEW指定
親項目、子項目を追加できる、項目にラベルをつけられる
ドラッグアンドドロップ・・・実装はイメージリストで行う

8リッチティストエディットコントロール
エディットコントロールに複数フォントや文字書式、段落書式を追加したもの

作成
直接なら・・・CrateWindowsEx() RichEditを指定
もうひとつは・・・LoadLibraryでRICHED32.DLLをロード
ダイアログテンプレートにコントロールを含める

データ転送
ストリーム入出力を使用

9その他
トラックバー
作成・・・CreateWIndowsEx()でTRACKBAR_CLASSを指定

プログレスコントロール
作成・・・CreateWIndowsEx()でPROGRESS_CLASSを指定
範囲 0~65535(64K)または範囲内の最小値から最大値

ヘッダーコントロール
列内にタイトルをもつリストビューのヘッダーとして機能する
作成・・・CreateWIndowsEx()でWC_HEADERを指定
Header_InsertItemで項目を追加

スピンボタンコントロール
ユーザーが値を増減するときに選択できる1対の矢印ボタン。エディットコントロールと組み合わされることが多い
作成・・・CreateWIndowsEx()でUPDOWN_CLASSを指定またはCreateUpDownControl()

アニメーションコントロール
サウンドのないAVI(Audio video interleaved)クリップを再生するウィンドウ
いつ終わるか判らない長い操作の間システムが動作していることを表す時使われるのが一般的
作成・・・CreateWIndows()でANIMATE_CLASSを指定またはAnimate_Createマクロ
その後メッセージを送ってAVIをオープン再生クローズ

ホットキーコントロール
ユーザーがホットキーとして使いたいキーの組み合わせを入力できるウィンドウ
ユーザーからはエディットコントロールのように見える。実際はHKM_GETHOTKEYメッセージでキーの組み合わせを取得して、システムのホットキーをセットアップしている
作成・・・CreateWIndowsEx()でHOTKEY_CLASSを指定、一般的にはHKM_SERRULESメッセージによりホットキーとして無効なキーの組み合わせを指定する


10ダイナミックデータ交換管理ライブラリ(DDEML)
DDE・・・動作中の2つのアプリケーションでデータを交換すること。交換間には共有メモリブロックを使う。また他のアプリにコマンドを送って制御することができる

データを送るアプリケーション=サーバー
データを受けるアプリケーション=クライアント
どのアプリもサーバーになったりクライアントになったりする
DDEを使うためにアプリケーションはDDEコールバックを関数をDDEMLに登録する
制御はDDEコールバック関数によって行う。DDEコールバック関数はそこを通るのがDDEトランザクションだけである点を除けば、WndProc()と同様の働きをする
DDEトランザクションはWindowsメッセージと似ている。
DDEトランザクションはWndProc()では処理されない
トランザクションに対してコールバックがあればそれを実行し、なければディフォルトの処理が実行される

DDEトランザクションに対するコールバック関数は一つしかないが、アプリケーションは同時に複数のDDE通信に参加できるので、どのDDE通信かを識別するための文字ハンドルを持つ
文字ハンドルの生成・・・DedCreateStringHandle()で文字列を与えることで生成する。
DDE通信では3つの文字列ハンドルが組み合わされて用いられる
項目
トピック
サービス

同期リンク・・・サーバーからデータが返されるのを待つ
非同期リンク・・・サーバーからXTYP_XACT_COMPLETEメッセージが来るまでクライアントは他の処理を続ける

コールドDDEリンク・・・データが必要になったときクライアント自体がデータを要求するため確立するリンク
ウォームDDEリンク・・・サーバーがデータ交換を開始する主導権をもつ。サーバーはデータブロックを転送しクライアントはそれを処理する。処理するタイミングはクライアントが決める
ホットDDEリンク・・・サーバーがデータ交換を開始する主導権をもつ。サーバーはデータブロックを転送しクライアントはそれを処理する。クライアントはすぐにそれを処理する。

DDE使用例、クライアントが1つのデータブロックをサーバーから取得する

クライアント①              
DdeInitalize()でDDEセッション開始 
DDEML.DLLがロードされていなければロードされる
クライアントのDDEコールバック関数のアドレスがDLLに渡される 
サーバー①DdeInitalize()でDDEセッション開始 
DDEML.DLLがロードされていなければロードされる
クライアントのDDEコールバック関数のアドレスがDLLに渡される 

クライアント②
サービス/トピック名に基づきDdeConnect()で通信開始
サーバー②
サーバーのコールバック関数がSTYO_CONNECTトランザクションを処理する、サーバーはサービス/トピック名がサーバーのサポートと一致しているかチェックして一致していればTRUEを返す

クライアント③
要求するデータの項目名を指定してDdeClientTransaction()でXTYP_REQUESTトランザクションをサーバーに送る
サーバー③
サーバーのコールバック関数はXTYP_REQUESTトランザクションを処理する。
トピック/項目名をチェックし、一致して入ればサーバーはDdeCreateDataHandle()でメモリブロックを作成しt要求されたデータをメモリブロックにコピーし、メモリブロックのハンドルを返す

クライアント④
DdeClientTransaction()からサーバーのグローバルメモリブロックのハンドルが戻り値として返される。
クライアントはDdeAccessData()でデータを読み取り、データ処理をする
サーバー③
サーバーはアイドル状態

クライアント⑤
③と④を繰り返して別のデータ項目を要求する
サーバー⑤
サーバーのDDEコールバック関数は処理すべきトランザクションを受動的に待ち、サーバー側から操作を開始することはない

クライアント⑥
DdeDisconnect()でDDE通信を終了する
サーバー⑥
サーバーのコールバック関数はXTYP_DISCONNECTトランザクションを受け取る、これでサーバーはDDE通信が終了したことを知る

クライアント⑦
クライアントがアクティブなDDEMLアプリケーションでなくなったことをDdeUninitialize()でDDEML.DLLに知らせる
サーバー⑦
サーバーがアクティブなDDEMLアプリケーションでなくなったことをDdeUnitialise()でDDEML.DLLに知らせる


11メッセージ
Win32APIとサポートAPI(マルチメディアやコモンコントロール)に存在するメッセージのまとめ
プリフィックス表
ACM_  アニメーションコントロールメッセージ
ACN_ アニメーションコントロール通知メッセージ
BM_ ボタンメッセージ
BN_ ボタン通知メッセージ
  ・
  ・
  ・
WM_   Windowsのその他の全メッセージ
  ・
  ・


12マクロ
アプリケーション共通の変換やユーティリティアクティビティを簡単に実現するために用意されたもの
マクロは識別子でコンパイル時にコードに変換される。
Win32APIマクロ一覧
例 CMYK・・シアン、マゼンタ、イエローおよびブラックの指定値を組み合わせることでCMYKカラーを作成する
など



Windows95 APIバイブル〈2〉コモンコントロール、メッセージ編 (Programmer’s SELECTION)

Windows95 APIバイブル〈2〉コモンコントロール、メッセージ編 (Programmer’s SELECTION)

  • 作者: リチャード・J. サイモン
  • 出版社/メーカー: 翔泳社
  • 発売日: 1997/02
  • メディア: 単行本



nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。