< August 2005 | September 2005 | October 2005 >

September 28, 2005

ファイル名に使用できない文字を判断する

Windows Xp になって、ファイル名に使用できない文字を入力したときのメッセージが修正されているのに気がついた。

pathgetchartype1.png

以前は、カンマとセミコロンが、実際にはファイル名に使用できるにもかかわらず、使用できない文字として表示されていたのは有名な話だ。

pathgetchartype2.png

ところで、shlwapi.dll には、ファイル名に使用できる文字かどうかを判断する関数がある。PathGetCharType だ。

続きを読む...

September 15, 2005

入力可能なコンボボックスにツールチップを設定する

MFC で、入力可能なコンボボックス (スタイルに CBS_DROPDOWN が設定されているもの) に対して、ツールチップを設定します。サンプルは、上が入力不可 (ドロップダウンリスト)、下が入力可能 (ドロップダウン) のコンボボックスです。それぞれ、m_DropdownList と m_DropdownCombo にマッピングしてあります。

ダイアログ

以下が、OnInitDialog 内でのツールチップ作成部分

// OnInitDialog
    if (m_ToolTip.Create (this))
    {
        m_ToolTip.AddTool (&m_DropdownList, _T ("ドロップダウンリスト"));
        m_ToolTip.AddTool (&m_DropdownCombo, _T ("ドロップダウンコンボ"));
    }

で、PreTransrateMessage で以下のようにしてツールチップにマウスイベントを渡します。

// PreTranslateMessage
BOOL CDropdownTooltipDialog::PreTranslateMessage (MSG* pMsg)
{
    switch (pMsg->message)
    {
    case WM_LBUTTONDOWN:
    case WM_LBUTTONUP:
    case WM_MOUSEMOVE:
        m_ToolTip.RelayEvent (pMsg);
        break;
    default:
        break;
    }
    return CDialog::PreTranslateMessage (pMsg);
}

ダイアログを表示して、コンボボックスをマウスでポイントすると、ドロップダウンリストの方はツールチップを表示しますが、ドロップダウンの方は表示しません。しかしドロップダウンの上辺の端ぎりぎりくらいにポインタを持っていくと、上のように表示されます。これは、ドロップダウンの方は入力するためのエディットボックスが前面に作成されているためです。というわけで、今回のお題はこちら。

続きを読む...

バックアップ付きコピー

日付つきのファイル名でバックアップしてから、新しいファイルをコピーするバッチファイルです。 コンパイルしたバイナリを実行環境にコピーするのに作っとくとベンリです。 頭3行をコピー対象に合わせて変更します。
SET SOURCEFOLDER=C:\Devenv
SET DESTFOLDER=C:\Exec
SET TARGETFILE=Sample.exe

C:
CD "%DESTFOLDER%"
REN "%TARGETFILE%" "%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%-%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%%TARGETFILE%"
COPY "%SOURCEFOLDER%\%TARGETFILE%" "%TARGETFILE%"

続きを読む...

September 9, 2005

TransparentBlt の補間モード

Win32API の TransparentBlt 関数の解説に

SetStretchBltMode 関数で iStretchMode モードの値として設定される BLACKONWHITE と WHITEONBLACK は、TransparentBlt 関数では COLORONCOLOR に変換されます。

とある。が、じっさいには、 HALFTONE も COLORONCOLOR に変換されているように見える。そう書いてあるリソースがどこにもないのだけれど。カラーキーを指定したければ自分でマスクするか、GDI+ を使うのがよさげ。