あかすくぱるふぇ

同人サークル「あかすくぱるふぇ」のブログです。

2015年09月

今回は、下図に示すようなタブコントロールの最小構成です。
画面
ソースコードは以下の通り。
Dlg_h
Dlg_cpp
App_h
App_cpp

やっていることは主に以下の2つです。

1. メインダイアログ(CMainDlgクラス)にタブコントロールをつけ、各タブの子ウィンドウとしてCTabDlg1とCTabDlg2クラスのインスタンスを生成。

2. 選択タブが変化した場合のイベントハンドラ(OnTcnSelchangeTab1)をオーバーライドし、選択タブに応じて表示を切り替える。

以下のページに書いてることですが、ググってもすぐにはヒットしないようなので、備忘録として残しておきます。
http://www.geocities.co.jp/Hollywood/2358/mfc_2.html

MFCでは、ユーザー定義のクラスをnewする必要があります。
しかし、MFC内部ではユーザーが定義したクラスの名前は分かりようがないので、newするための関数をユーザーが用意する必要があります。
ただし、newの処理をユーザーが直書きするのはめんどくさい。
そこで用意されたのが、DECLARE_DYNAMICとIMPLEMENT_DYNAMICマクロです(と上記ページでは予想しています)。

DECLARE_DYNAMICは、new処理を行う関数の宣言。
IMPLEMENT_DYNAMICは、その関数の定義。

当たり前な人にとっては当たり前なんだろうけど、自分はずっと混乱してました。
「静的リンク、動的リンク、暗黙的リンク、明示的リンクってなんやねん」みたいな。
その辺の話がやっと理解できたっぽいので、備忘録として残しておこうと思います。

・前提
ライブラリは関数(と変数)の集合です。
関数は、関数名と関数の中身でできています。

・静的リンクと動的リンク
静的リンクはコンパイル時に関数名と関数の中身をリンクします。コンパイル後にライブラリの中身を変更できないので、「静的」と呼ばれます。
動的リンクは実行時に関数の中身をリンクします。コンパイル後にライブラリの中身を変更する余地が残っているので、「動的」と呼ばれます。

静的リンクでは、必ず.libファイルを使います。
コンパイル時にリンクすべき.libファイルを指定します。

一方、動的リンクでは、(Dynamic Link Libraryという名前の通り、)必ず.dllファイルを使います。
実行時にリンクすべき.dllファイルを参照します。

ここまでは比較的分かりやすい話だと思います。
難しいのが、動的リンクには、.libファイルを使う場合と使わない場合があるというところです。
それは、リンクする.dllファイルのファイル名や関数の関数名(以下、DLL情報と呼ぶ)を、呼び出し側の実行ファイルにどう埋め込むのかという点と関連します。

・明示的リンクと暗黙的リンク
.dllファイルを使うリンクには、明示的リンクと暗黙的リンクがあります。
明示的リンクとは、呼び出し側のプログラムのソースコードに、DLL情報を(明示的に)書くことによって、リンクする方式です。具体的には、LoadLibrary()やGetProcAddress()を用います。
一方、暗黙的リンクとは、呼び出し側のプログラムのソースコードにDLL情報を直接書かずに(暗黙的に)リンクする方式です。

暗黙的リンクでは、ソースコードにDLL情報を書かない代わりに、.libファイルをコンパイル時にリンクすることでDLL情報を実行ファイルに埋め込みます。
以上のような事情から、動的リンクには、.libファイルを使う場合と使わない場合があるのです。

・関連記事
http://akasuku.blog.jp/archives/68875230.html

今回はダイアログの最小構成。

無題

このソースコードを書くのとは別に、以下の作業が必要です。
➀リソースファイル > 追加 > リソース > Dialog > 新規作成
➁リソースビューで、ダイアログにボタン貼り付け

以上です。
「ここからは複雑になるんだろうなぁ」と思っていたら、とっても簡単でした。
Visual Studioが自動生成するMFCプロジェクトは色々と余計なものがくっついているようですね。

前回の最小構成にボタンを付けてみました。
リソースビューからしか付けたことなかったけど、意外と簡単。

header

source

やったことは以下の通り。
➀ボタン(CButton型変数)をウィンドウクラスのメンバ変数に追加。
➁ウィンドウクラスのコンストラクタでボタンを生成。
③ボタンのイベントハンドラをウィンドウクラスのメンバ関数に追加。
④メッセージマップにボタンのイベントハンドラを追加。

MFCって、すごくごちゃごちゃしてるイメージがありましたが、最小構成だけ見ると、すごくすっきりしているように見えますね。

↑このページのトップヘ