スクリーンセーバーのオプションを調べる。

スクリーンセーバーの起動スイッチの判定の仕方。
VC++に付いているSAVERはバグがあってこれが正しい。


メンバ関数を追加する。


// スイッチを比較する関数
BOLL CXXXApp::MatchOption(LPTSTR lpsz, LPTSTR lpszOption)
{
    if (lpsz[0] == _T('-') || lpsz[0] == _T('/')) lpsz++;
    lpsz[1] = '\0';
    if (lstrcmpi(lpsz, lpszOption) == 0) return TRUE;  //一致したらTRUEを返す。
    return FALSE;  //それ以外ならFALSE。
}

呼び出し。

BOOL CXXXApp::InitInstance()
{
      :
      :
    // スイッチが"/c"か無い場合、設定ダイアログへ
    if (__argc == 1 || MatchOption(__argv[1], _T("c")))
    {
        CXXXDlg dlg;
        if (dlg.DoModal() == IDOK)
            {
                // OKを押した時の処理。
            }
    }
    // "/p"でプレビュー
    else if (MatchOption(__argv[1], _T("p")))
    {
        CWnd* pParent = CWnd::FromHandle((HWND)atol(__argv[2]));
        ASSERT(pParent != NULL);
        CDrawWnd* pWnd = new CDrawWnd();
        CRect rect;
        pParent->GetClientRect(&rect);
        pWnd->Create(NULL, WS_VISIBLE|WS_CHILD, rect, pParent, 0, NULL);
        m_pMainWnd = pWnd;
        return TRUE;
    }
    // "/s"スクリーンセーバー実行
    else if (MatchOption(__argv[1], _T("s")))
    {
        CSaverWnd* pWnd = new CSaverWnd;
        pWnd->Create();
        m_pMainWnd = pWnd;
        return TRUE;
    }
    return FALSE;
}

[ 戻る ]