tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルコモンダイアログ内のコントロールのサイズ取得
記事No6023
投稿日: 2007/08/07(Tue) 17:37
投稿者Edward
.NETと言うよりはAPIの質問なのですが
コモンダイアログ中のコントロールのサイズを取得したいのです
コールバック関数中で以下の様な事をしてみたのですが

hCtlWnd = GetDlgItem(ダイアログのウィンドウハンドル, ダイアログ内のコントロールID)
Call GetWindowRect(hCtlWnd, udtRect)    (GetClientRectでも試してみました)

コントロールのウィンドウハンドル取得までは出来るのですが。
サイズ取得が出来ません。
何方か御指導下さいますようよろしくお願いいたします。


余談ですが...
GetDlgItemRectなんて関数が有ったら良いのになんて思って、検索してみたら
マイクロソフトのHPには出ていないけど、怪しい中国語のHP等に出てきました
これって非公開関数?どのDLLに入っているの?
(外国語が解らないのでWinAPI以外の関数なのかも良くわかりません)

[ツリー表示へ]
タイトルRe: コモンダイアログ内のコントロールのサイズ取得
記事No6030
投稿日: 2007/08/08(Wed) 11:38
投稿者Blue
サイズが取得できないとは?

親ウィンドウからの相対位置であれば
普通は GetWindowRectで取得して、ScreenToClientを使って変換します。

[ツリー表示へ]
タイトルRe^2: コモンダイアログ内のコントロールのサイズ取得
記事No6033
投稿日: 2007/08/08(Wed) 14:48
投稿者Edward
Blue様 御指導有難う御座います。

サイズは適正に取得出来ていました。申し訳有りません。
その後に問題が有ったようです。

コモンダイアログ内のコントロールにパス文字列を表示したいのですが
このコントロールはダイアログのリサイズに伴いリサイズされます。
パス文字列が入り切らなくなった時は"..."を含めた省略形で表示します。
一行だけを表示するならば、ぴったりサイズで表示されるのですが。
パスの前に二行短い行を付けて三行で表示したいのです。
---------------------------------------------------
表示例:
 タイトル                    <1行目
                         <2行目
 C:\AAA\BBB\CCC...DDD(一行目を差引いた分、短い)    <3行目
---------------------------------------------------
上記の文字列をPathSetDlgItemPathに渡すと三行目が幅ピッタリではなく
一行目の長さ分短く表示されます。

なので自力でコントロールの横幅ピッタリのパス文字列を作り
 "タイトル" & vbCrLF & vbCrLF 
と付けて三行で表示したいと考え。

自力でコントロールの横幅ピッタリの省略形パス文字列を作ろうとしました
コントロール幅は正確に取得出来ていましたが、返って来る文字列が
なぜかコントロール幅より短いのです。何故なのでしょうか?

方法1:
hCtlWnd = GetDlgItem(hwnd, CtlID)
Call GetWindowRect(hCtlWnd, udtRect)
lngDCHandle = GetDC(hCtlWnd)
Call PathCompactPath(lngDCHandle, strDir, (udtRect.Right - udtRect.Left))
Call ReleaseDC(hwnd, lngDCHandle)
Call SetDlgItemText(hwnd, CtlID, strDir)
方法2:
Call PathSetDlgItemPath(hWnd, CtlID, strDir)

方法2ではコントロール幅ピッタリに表示されますが。
方法1ではなぜか文字列が短いです、PathCompactPathに渡しているサイズは正しい。
何がいけないのでしょうか?

または、違う方法からでも望みを叶えられる手段が有れば。
何方か御指導下さいますよう、よろしくお願いいたします。

[ツリー表示へ]
タイトルRe^3: コモンダイアログ内のコントロールのサイズ取得
記事No6053
投稿日: 2007/08/09(Thu) 11:26
投稿者Edward
PathCompactPathに文字列もサイズも正しく渡しているのに
期待どおりの省略形にならないという事は、Font情報を
示してあげていないからかなと思ったのですが。

コモンダイアログのコントロールのFontハンドルって
どうしたら取得出来るのでしょうか?

APIに詳しい方
何方か御指導下さいますよう、よろしくお願いいたします。

[ツリー表示へ]
タイトルRe^4: コモンダイアログ内のコントロールのサイズ取得
記事No6056
投稿日: 2007/08/09(Thu) 11:38
投稿者Blue
WM_GETFONTをSendMessage

[ツリー表示へ]
タイトルRe^5: コモンダイアログ内のコントロールのサイズ取得
記事No6071
投稿日: 2007/08/09(Thu) 16:43
投稿者Edward
Blue様
御指導有難う御座います。
おかげで解決させる事が出来ました。
有難う御座います。

[ツリー表示へ]