こんにちは。コンピュータ研究家の片山博文MZです。
RisohEditor
http://katahiromz.web.fc2.com/re/ja
https://github.com/katahiromz/RisohEditor
これは、自作のWin32リソースエディタです。MZC4という自作のクラスライブラリーを使って記述しています。
実は、このリソースエディタでOLEコントロールをサポートしたいと考えております。
- OLEコントロールのウィンドウクラス名は、何になりますか?
- OLEコントロールのスタイルには、どんな値が指定できますか?
- OleInitialize/OleUninitialize以外にどんな初期化コードが必要ですか?
- どうやってOLEの種類を指定できますか?
この4つの質問にお答え下さい。よろしくお願いします。
追伸。MZC4には、次のようなMActXCtrl.hppというクラスもあります。
MActXCtrl.hpp
https://github.com/katahiromz/MZC4/blob/master/include/MActXCtrl.hpp
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
この回答では ActiveX コントロールで統一して記述します。
結論としては、リソースとして出力するべき内容は使用するフレームワーク毎に異なります。
● MFC の場合
MFC では ActiveX コントロールのホスト機能は CWnd が担っています。
この場合、CLSID はウィンドウクラス名に設定されます。
CONTROL "",IDC_CTRL1,"{8BD21D10-EC42-11CE-9E0D-00AA006002F3}",WS_TABSTOP,141,7,130,132
上記コントロールの永続化データはダイアログの初期化データとして別のリソースに保存されます。
IDD_TEST_DIALOG DLGINIT
BEGIN
IDC_CTRL1, 0x37a, 99, 0
0x0000, 0x0000, 0x0023, 0x0000, 0x0001, 0x0000, 0x001b, 0x0000, 0x0001,
0x8001, 0x0000, 0x0000, 0x0000, 0x001a, 0x0000, 0x0002, 0x8001, 0x0001,
0x0000, 0x0000, 0x1802, 0x0100, 0x1401, 0x0080, 0x0000, 0x1b00, 0x8048,
0x0224, 0x0003, 0x9100, 0x0017, 0x7700, 0x0014, 0x0000, 0x1c02, 0x3500,
0x0000, 0x0c00, 0x0000, 0xb480, 0x0000, 0x8000, 0x0002, 0x4d00, 0x2053,
0x4955, 0x4720, 0x746f, 0x6968, "\143"
0
END
このリソースに保存されているデータは IPersistPropertyBag(2) 関連のインターフェースを使用せずに
IPersistStream(Init) でシリアライズされたデータを保持していると思われます。
上記を踏まえて
>1. OLEコントロールのウィンドウクラス名は、何になりますか?
CLSID を指定します。
>2. OLEコントロールのスタイルには、どんな値が指定できますか?
ActiveX コントロール自体が独自のスタイルで独自のウィンドウを作成するため、
ほぼ指定するスタイルはありません。
WS_TABSTOP を指定するかどうかというところです。
それ以外では WS_ENABLED と WS_VISIBLE ぐらいしか意味がありません。
ウィンドウレスアクティベーションを許可する場合、
WS_CLIPCHILDREN | WS_CLIPSIBLINGS を指定した方が良いです。
拡張スタイルにかんしてはクライアント領域のサイズに影響があるスタイルを指定することができます。
また、WS_EX_CONTROLPARENT を指定した場合、複合コントロールでは多少影響します。
>3. OleInitialize/OleUninitialize以外にどんな初期化コードが必要ですか?
MFC の ActiveX ホスト機能の初期化処理に従います。
App Wirzard で ActiveX コントロールのサポートをチェックするのが簡単で良いです。
>4. どうやってOLEの種類を指定できますか?
ウィンドウクラス名に CLSID を指定します。
● ATL/WTL の場合
ATL/WTL では MFC 用に生成されたリソースをそのまま使用します。
ただし、WebBrowser コントロールをホストする場合は若干意味が変わります。
ウィンドウテキストは初期段階でアクセスする URL を指定することができます。
上記以外は MFC と同じです。
>1. OLEコントロールのウィンドウクラス名は、何になりますか?
MFC と同様に CLSID を指定します。
なお、ウィンドウクラス名に AtlAxWin?? か AtlAxWinLic?? を指定することもできます。
※?? は ATL のバージョンによって変化します。
>2. OLEコントロールのスタイルには、どんな値が指定できますか?
MFC と同じ指定です。
>3. OleInitialize/OleUninitialize以外にどんな初期化コードが必要ですか?
ATL の ActiveX コントロールホスト機能を有効にする必要があります。
ATL の AtlAxWinInit の呼び出しが必要になることがあります。
WTL の場合、Wizard で ActiveX コントロールを有効にすれば問題ありません。
>4. どうやってOLEの種類を指定できますか?
MFC と同様にウィンドウクラス名に CLSID を指定します。
また、ウィンドウクラスに AtlAxWin?? か AtlAxWinLic?? を指定した場合、
ウィンドウタイトルに CLSID:コンポーネントのCLSID によって指定することもできます。
●独自に ActiveX コントロールホストを作成する場合
今までの話と同様に ActiveX コントロールではなく
ActiveX コントロールホストをダイアログ上に作成することになります。
フレームワークを使用せずに実装する場合、以下のようになります。
>1. OLEコントロールのウィンドウクラス名は、何になりますか?
ActiveX コントロールホストのウィンドウクラス名を指定してください。
>2. OLEコントロールのスタイルには、どんな値が指定できますか?
MFC と同じになります。
>3. OleInitialize/OleUninitialize以外にどんな初期化コードが必要ですか?
ActiveX コントロールホストのウィンドウクラス名を登録する必要があります。
通常のカスタムコントロールと同じ手順になります。
>4. どうやってOLEの種類を指定できますか?
ウィンドウクラス名がカスタムコントロールによって使用されるため、
ウィンドウテキストに CLSID を指定するのが常套手段になります。
永続化データについては MFC/ATL/WTL と似たような感じで独自リソースを定義するのがおすすめです。
具体的な製品名を述べることはできませんが、
永続化データも合わせてウィンドウテキストにしているものもあります。
ダイアログテンプレートとしては MFC と同じものを使用し、
ダイアログボックス生成だけ独自に処理する実装(ATL/WTL)もあります。
投稿2018/04/06 19:00
総合スコア881
0
ActiveXコントロールはそろそろ滅ぶべき文明じゃないかと思うのですがいかがでしょうか?例えばMicrosoft EdgeではActiveXコントロールをサポートしません。
投稿2018/04/05 11:35
編集2018/04/05 11:36総合スコア5850
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/05 12:56
2018/04/05 12:57
2018/04/05 13:00 編集
2018/04/05 13:03
2018/04/05 13:37
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。