親ウィンドウ取得、ルートウィンドウ取得の方法 – プログラミング – Home

親ウィンドウ取得、ルートウィンドウ取得...
 
通知
すべてクリア

[解決済] 親ウィンドウ取得、ルートウィンドウ取得の方法


Arutu
 Arutu
(@Arutu)
ゲスト
結合: 18年前
投稿: 24
Topic starter  

現在
非MFCにて、
VisualC++2005
VisualC++6.0
両方に対応しようとプログラムを書いているのですが、

GetAncestorというAPIがVC6だとコンパイルエラーになり、またVC6ヘルプにも見当たりません。

ということで、GetAncestor を使わずに
GetAncestor( hWnd, GA_PARENT );
GetAncestor( hWnd, GA_ROOTOWNER );
を実現したいと考えています。

GA_ROOTOWNER
の方は、親とオーナーを辿って一番下地のウィンドウを取得するものなので、GetParentと呼び続け
れば再現できそうです。
ただし、環境によっては GetParent で親は取得できるけど親がオーナーの場合 NULL が返るという
話も聞いたことがあり、少々不安です。
詳しい方がいれば情報お待ちしています。

GA_PARENT
は、ヘルプ曰く、親ウィンドウは取得できるけど自身がオーナーの場合は取得に失敗するようです。
 どちらも取得できるGetParentでは再現できそうにありません。
ちなみにオーナーの定義が調べてもイマイチわからなかったのですが、GA_PARENTを使った私の環境
での(WindowsXP)実験では親がNULLな場合とポップアップウィンドウどうやら、オーナーウィンド
ウらしいです。

これらの、実現方法・一口メモ・ツッコミなどお待ちしています。
よろしくお願いします。


引用未解決
トピックタグ
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 22年前
投稿: 160
 

> GetAncestorというAPIがVC6だとコンパイルエラーになり、またVC6ヘルプにも見当たり
ません。

ヘルプの方は判りませんが…
winuser.hにありませんか?
WINVERの設定とかではないでしょうか??


返信引用
Arutu
 Arutu
(@Arutu)
ゲスト
結合: 18年前
投稿: 24
Topic starter  

windows.h をインクルードする前に、
#define WINVER 0x0500
と書いたらコンパイル通るようになりました。

Windows98以降でサポートされているようですね。
こういった設定は初めて知りました。

ただこれだとWindows95で動かないんですよね……
フリーソフト制作しているので出来ればWindows95も対応したい……とも思うが、もはや使ってる人
数なんて0にも等しいような過去の遺産だし、別にいいかなーとも思う。

うーん、悩む。

もう少し情報集めます。
ありがとうございました。


返信引用
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
結合: 22年前
投稿: 160
 

> ただこれだとWindows95で動かないんですよね……
> フリーソフト制作しているので出来ればWindows95も対応したい……とも思うが、もはや
使ってる人
> 数なんて0にも等しいような過去の遺産だし、別にいいかなーとも思う。

GetProcAddress()で引っ張ってくる…という方法もアリかと。
ちょっと面倒かも知れませんが。

# 私が公開しているモノは…Windows95だとIE4のシェル統合が必要って感じで出してます。
# 動作確認は出来ていませんけど。(手元にWindows95ないし)
# 使っていなかったけど、HeapCompact()のアドレス、ソレで取ってきているな。(9X系未
対応。)


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

GetParentとの動作の違いについてはよくわかりませんが
GetWindow関数にGW_OWNERを指定すればオーナーウインドウが取れるので
それと組み合わせるとか。


返信引用
Arutu
 Arutu
(@Arutu)
ゲスト
結合: 18年前
投稿: 24
Topic starter  

とりあえずウィンドウスタイルに WS_CHILD が指定されている場合のみ GetParent を使うことで
GetAncestor( hWnd, GA_PARENT ) の代用をすることにしました。(WS_CHILD以外はNULLを返す)

オーナーウィンドウの具体的な定義が調べてもイマイチなので、これで GetAncestor( hWnd,
GA_PARENT ) と同じ動作が保障されるわけではありませんが、とりあえず妥協という形で解決とさ
せていただきたい思います。

いろいろ提案していただいてありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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