![]()
Windows2000以降には「今後、このダイアログボックスを表示しない」を備えたメッセージボックスとしてSHMessageBoxCheckが用意されている。
このAPIはチェックを入れてボタンを押したとき、レジストリに押されたボタンの情報を保存している。
#include "shlwapi.h"
#pragma comment(lib,"shlwapi.lib")
void Test(void)
{
int ret;
//初回はメッセージボックスが表示される
ret = ::SHMessageBoxCheck(NULL,_T("今後表示しないにチェックを入れてボタンを押してください"),_T("test"),MB_YESNO | MB_ICONINFORMATION,IDNO,_T("{D438034E-E6C2-4dae-BF16-12CEE68E201E}"));
//メッセージボックスが表示されない
ret = ::SHMessageBoxCheck(NULL,_T("チェックを入れたらこのダイアログは表示されません"),_T("test"),MB_YESNO | MB_ICONINFORMATION,IDNO,_T("{D438034E-E6C2-4dae-BF16-12CEE68E201E}"));
//レジストリを削除
{
LONG nRet;
CRegKey cRegistry;
nRet = cRegistry.Open(HKEY_CURRENT_USER,_T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DontShowMeThisDialogAgain"));
if(nRet == ERROR_SUCCESS)
{
cRegistry.DeleteValue(_T("{D438034E-E6C2-4dae-BF16-12CEE68E201E}"));
cRegistry.Close();
}
}
//メッセージボックスが表示される
ret = ::SHMessageBoxCheck(NULL,_T("レジストリを削除したので表示されます"),_T("test"),MB_YESNO | MB_ICONINFORMATION,IDNO,_T("{D438034E-E6C2-4dae-BF16-12CEE68E201E}"));
}
