CWinApp 雑記 |
Last Updated: Dec.19,2006 |
| 使用しているコンパイラは、Microsoft Visual C++ 6.0 です。これ以外のバージョンでは記述と食い違うことがあるかも知れません。 | |
アプリケーションで初期化データを保存する「場所」をレジストリではなく、EXE ファイルの置かれるフォルダ内に ini ファイルとして保存するように変更します。なお、私自身は殊更にレジストリへの保存を否定する考えは持っていません。
CWinApp の派生クラスの InitInstance() に以下のコードを追加します。
BOOL CMyApp::InitInstance()
{
free((void*)m_pszProfileName);
TCHAR szPath[MAX_PATH + 1];
::GetModuleFileName(NULL, szPath, MAX_PATH);
lstrcpy(_tcsrchr(szPath, _T('.')), _T(".ini"));
m_pszProfileName = _tcsdup(szPath);
...
...
}
次に、その下にある以下のコードを削除します。
// 設定が保存される下のレジストリ キーを変更します。
// TODO: この文字列を、会社名または所属など適切なものに
// 変更してください。
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
たとえば、エディタの表示フォントを変更するなど、全てのビューに更新通知を行いたい場合に使います。どこからでも呼び出せるのでとても便利です。
// ** 宣言 **
void UpdateAllViews(CView* pSender, LPARAM lHint = 0L, CObject* pHint = NULL);
// ** 定義 **
void CMyApp::UpdateAllViews(CView* pSender, LPARAM lHint, CObject* pHint)
{
CDocTemplate* pDocTemplate;
POSITION posDocTemplate = m_pDocManager->GetFirstDocTemplatePosition();
while (posDocTemplate != NULL)
{
pDocTemplate = m_pDocManager->GetNextDocTemplate(posDocTemplate);
ASSERT_VALID(pDocTemplate);
ASSERT(pDocTemplate->IsKindOf(RUNTIME_CLASS(CDocTemplate)));
POSITION posDoc = pDocTemplate->GetFirstDocPosition();
while (posDoc != NULL)
{
CDocument* pDoc = pDocTemplate->GetNextDoc(posDoc);
ASSERT_VALID(pDoc);
ASSERT(pDoc->IsKindOf(RUNTIME_CLASS(CDocument)));
pDoc->UpdateAllViews(pSender, lHint, pHint);
}
}
}
| Back | Copyright (c) 2006 AOK. All Rights Reserved. |