Programming Windows Maniacs - プログラミング ウィンドウズ マニアックス ■ ご利用に際して ■ 更新履歴 ■ お問い合わせ ■ このホームページについて  
ホーム >> シェル >> スタティックコントロールにはいりきらないパスを縮小し"..."にするには

スタティックコントロールにはいりきらないパスを縮小し"..."にするには

  あるファイルやフォルダのフルパスを、スタティックテキストで表示する際、コントロールサイズが小さく入りきらないことがあります。

  この場合、Shlwapi(シェルワッピ)の PathSetDlgItemPath () APIがオススメです。 ちなみShlwapiは、Windows 98以降で利用可能です。
  PathSetDlgItemPath () APIは、PathCompactPath () APIを内部的に使用して、自動的にサイズを決定してくれます。

   Windows 95ではGetTextExtentPoint32 () APIを使って文字列のサイズを取得し、入りきらなければその分文字数を減らし、"..."が入る分をさらに減らすようなプログラムを記載していました。Windows 98よりShellwapiがあるため、簡単になりました。

  以下は、スタティックコントロールのサイズにしたがって、C:\Program Files\Internet Explorer\iexplore.exe というパスを縮小して表示する例です。ビルドするには、shlwapi.lib へのリンクが必要です。

■■■ statictext プロジェクト
■ main.cpp

// スタティックコントロールにはいりきらないパスを"..."にするには

// スタティックコントロール(ウィンドウ)のサイズにあわせて、パスが表示されます。shlwapi.lib が必要です。

#include <windows.h>
#include <tchar.h>

#include <shlwapi.h>

#include "resource.h"

BOOL CALLBACK DialogFunc ( HWND hWnd, UINT nMessage, WPARAM wParam, LPARAM lParam )
{
    const _TCHAR cszPath[] = _TEXT ( "C:\\Program Files\\Internet Explorer\\iexplore.exe" );

    switch ( nMessage ) {
    case WM_INITDIALOG:
        {
            // パスをStatic textのサイズにあうように変更する
            PathSetDlgItemPath ( hWnd, IDC_PATH_STATIC, cszPath );
        }
        return TRUE;
    case WM_SIZE:
        {
            // ウィンドウのサイズが変更されたときに
            // Static textのサイズを変更する
            WORD wWidth = LOWORD ( lParam );
            WORD wHeight = HIWORD ( lParam );
            MoveWindow ( GetDlgItem ( hWnd, IDC_PATH_STATIC ), 0, 0, wWidth, wHeight, FALSE );

            // パスをスタティックテキストのサイズにあうように変更する
            PathSetDlgItemPath ( hWnd, IDC_PATH_STATIC, cszPath );
        }
        return TRUE;
    case WM_COMMAND:
        switch ( LOWORD ( wParam ) ) {
        case IDCANCEL:
            EndDialog ( hWnd, 0 );
            return TRUE;
        }
        break;
    }
    return FALSE;
}

int WINAPI _tWinMain ( HINSTANCE hThisInstance,
    HINSTANCE,
    _TCHAR *,
    int )
{
    int nResponse;
    nResponse = DialogBox ( hThisInstance, MAKEINTRESOURCE ( IDD_DIALOG1 ), NULL, DialogFunc );

    return nResponse;
}

■ resource.h
#define IDD_DIALOG1 101
#define IDC_PATH_STATIC 1000
■ resrc.rc

#include <winres.h>
#include "resource.h"

IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 102, 7
STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "C:\\Program Files\\Internet Explorer\\iexplore.exe"
FONT 9, "MS Pゴシック"
BEGIN
    LTEXT "Static",IDC_PATH_STATIC,0,0,104,8,SS_SUNKEN
END

  ■ ご利用に際して ■ 更新履歴 ■ お問い合わせ ■ このホームページについて Copyright © 2014 A.Morita