タスクバーのドキュメント
mk:@MSITStore:X:MSDNShellcc.chm::/platform/Shell/Shell_Int/Taskbar.htm
http://msdn.microsoft.com/ja-jp/library/cc144179(VS.85).aspx
hdc が拡張メタファイルのデバイスコンテキスト?
hdc が拡張メタファイルのデバイスコンテキストかどうかを調べるには、GetObjectType 関数
GetDeviceCaps
GetObjectType
メニューが左にポップアップ…
StringArrayToString と VC
以下のコードで,VC のそれぞれのバージョン,32 ビット MBCS/UNICODE で約 1 M 文字の変換を計測
BOOL O_StringArrayToString(const CStringArray& strAry,CString& str,const CString& sp=_T("rn"))
{
for (int lineCount=0 ; lineCount<strAry.GetSize() ; lineCount++) {
str += strAry.GetAt(lineCount) ;
if (str.Right(sp.GetLength()) != sp) {
str += sp ;
}
}
return TRUE ;
}
1+2 x 333,333 999,999 文字 |
10+2 x 83,333 999,996 文字 |
100+2 x 9,803 999,906 文字 |
1,000+2 x 998 999,996 文字 |
||
VC 6.0 | MB | 351.205 | 88.576 | 9.984 | 0.962 |
VC 7.0 | MB | 0.351 | 0.280 | 0.231 | 0.210 |
VC 7.1 | MB | 0.351 | 0.290 | 0.240 | 0.230 |
VC 8.0 | MB | 0.340 | 0.250 | 0.220 | 0.231 |
VC 9.0 | MB | 0.360 | 0.240 | 0.240 | 0.201 |
VC 10. | MB | 0.090 | 0.020 | 0.000 | 0.000 |
VC 6.0 | WC | 936.567 | 228.458 | 25.857 | 2.584 |
VC 7.0 | WC | 1.342 | 1.281 | 1.252 | 1.261 |
VC 7.1 | WC | 1.462 | 1.282 | 1.252 | 1.272 |
VC 8.0 | WC | 1.392 | 1.281 | 1.252 | 1.242 |
VC 9.0 | WC | 1.382 | 1.322 | 1.302 | 1.232 |
VC 10. | WC | 0.080 | 0.020 | 0.010 | 0.010 |
VC 10 は,ほとんど無視できる速度.
VC 7 ~ VC 9 は,UNICODE exe で少し時間がかかる.
VC 6 exe では,ループの回数にかなり影響を受ける
(恐らく領域の割り当ての関係と思われる).
また,CString のサイズが大きくなる(ループの lineCount が大きくなる)程,遅くなった.
綺麗なコードでないが,~ VC 9 の場合に置き換える
BOOL N_StringArrayToString(const CStringArray& strAry,CString& str,const CString& sp=_T("rn"))
{
CStringArray tmpSA ;
CString tmpStr ;
for (int lineCount=0 ; lineCount<strAry.GetSize() ; lineCount++) {
tmpStr += strAry.GetAt(lineCount) ;
if (tmpStr.Right(sp.GetLength()) != sp) {
tmpStr += sp ;
}
if ((lineCount%100-1) == 0) {
tmpSA.Add(tmpStr) ;
tmpStr.Empty() ;
}
}
if (!tmpStr.IsEmpty()) {
tmpSA.Add(tmpStr) ;
}
if (tmpSA.GetSize() > 1) {
::N_StringArrayToString(tmpSA,str,sp) ;
}
else if (tmpSA.GetSize() == 1) {
str = tmpSA[0] ;
}
else {
return FALSE ;
}
return TRUE ;
}
…/Test/TsSAtoS.zip
「無効な引数が発生しました。」
MFC 7.1 以降,AfxThrowInvalidArgException が呼ばれるようになっている
C:\Program Files\Microsoft Visual Studio\VC98\MFC\Include\AfxColl.inl Line 96
_AFXCOLL_INLINE DWORD& CDWordArray::ElementAt(int nIndex)
{ ASSERT(nIndex >= 0 && nIndex < m_nSize);
return m_pData[nIndex]; }
C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\include\AfxColl.inl Line 126
_AFXCOLL_INLINE DWORD& CDWordArray::ElementAt(INT_PTR nIndex)
{ ASSERT(nIndex >= 0 && nIndex < m_nSize);
if( nIndex < 0 || nIndex >= m_nSize )
AfxThrowInvalidArgException();
return m_pData[nIndex]; }
—————————
App
—————————
無効な引数が発生しました。
—————————
OK
—————————
nIndex が配列の範囲を超えている場合に ASSERT .
2010/06/15 追記
VC8 AtlSimpStr.h Line 389
XCHAR operator[]( __in int iChar ) const
{
ATLASSERT( (iChar >= 0) && (iChar <= GetLength()) ); // Indexing the ” is OK
if( (iChar < 0) || (iChar > GetLength()) )
AtlThrow(E_INVALIDARG);
return( m_pszData[iChar] );
}
—————————
App
—————————
パラメータが間違っています。
—————————
OK
—————————
MSB6006
ビルドで MSB6006 のエラーが発生するようになってしまった.
—— ビルド開始: プロジェクト: XxxXxXxx, 構成: Release x64 ——
XxxXxXxx.vcxproj -> \XxxXXDocumentsXxxxxxxXXXXXxxXxXxxx64_R10XxxXxXxx.exe
—— ビルド開始: プロジェクト: XxxXxXxx, 構成: Release Win32 ——
XxxXxXxx.vcxproj -> \XxxXXDocumentsXxxxxxxXXXXXxxXxXxxx86_R10XxxXxXxx.exe
C:Program Files (x86)MSBuildMicrosoft.Cppv4.0Microsoft.CppCommon.targets(562,5): error MSB6006: "mt.exe" はコード 31 を伴って終了しました。
========== ビルド: 2 正常終了、1 失敗、0 更新不要、0 スキップ ==========
リビルドしても効果なし.
ファイルサーバも含め再起動をかけたら正しくビルドできるようになった.
explorer コマンドラインオプション
explorer のコマンドラインオプション
http://support.microsoft.com/kb/314853/ja
explorer コマンドラインオプション
Visual Style を無効に
ダイアログ上のボタンなどの Visual Style を無効に
BOOL DisableVisualStyle (CWnd* wnd)
//************************************************************************************************** // ファイル名 :HelpVSty.hxx // 機能名 :ビジュアルスタイルヘルパ Visual Style 関数の簡略化 // 作成者 : // 作成年月日 :’09/07/02 // 変更履歴 :’09/07/02 //************************************************************************************************** #ifndef _INC_H_HELP_THEME_API #define _INC_H_HELP_THEME_API #include <AfxWin.h> //******************************************************************************* // 関数名 :SetWindowTheme // 作成日 :’09/07/02 //******************************************************************************* inline HRESULT Hlp_SetWindowTheme (HWND hwnd,LPCWSTR pszSubAppName,LPCWSTR pszSubIdList) { HMODULE hDll = ::LoadLibrary(_T("UxTheme.dll")) ; if (hDll == NULL) { return !S_OK ; } HRESULT (WINAPI *pfSetWindowTheme)(HWND,LPCWSTR,LPCWSTR) = NULL ; (FARPROC&)pfSetWindowTheme = ::GetProcAddress(hDll,("SetWindowTheme")) ; HRESULT res = !S_OK ; if (pfSetWindowTheme != NULL) { res = pfSetWindowTheme(hwnd,pszSubAppName,pszSubIdList) ; } ::FreeLibrary(hDll) ; return res ; } //******************************************************************************* // 関数名 :Visual Style を OFF に // 作成日 :’09/07/02 //******************************************************************************* inline BOOL DisableVisualStyle (CWnd* wnd) { if (wnd == NULL) { return FALSE ; } if (wnd->m_hWnd == NULL) { return FALSE ; } #ifdef __ATLBASE_H__ { // コモンコントロールのバージョンをチェック DWORD ccMajor = 0 ; DWORD ccMinor = 0 ; AtlGetCommCtrlVersion(&ccMajor,&ccMinor) ; if (ccMajor < 6) { return TRUE ; } } #endif HRESULT res = !S_OK ; res = ::Hlp_SetWindowTheme(wnd->GetSafeHwnd(), L" ", L" ") ; return (res == S_OK) ; } #endif
コンボボックスの高さ指定
//******************************************************************************* // 関数名 :コンボボックスの高さを,親ウィンドウの下に合わせる // 作成日 :’09/07/01 //******************************************************************************* #ifndef CBM_FIRST // C:Program Files (x86)Microsoft SDKsWindowsv7.0AIncludeCommCtrl.h #define CBM_FIRST 0x1700 // Combobox control messages #define CB_SETMINVISIBLE (CBM_FIRST + 1) #define CB_GETMINVISIBLE (CBM_FIRST + 2) #define CB_SETCUEBANNER (CBM_FIRST + 3) #define CB_GETCUEBANNER (CBM_FIRST + 4) #endif BOOL FitDropHeight (CComboBox* ctrl,CWnd* parent) { if (ctrl == NULL) { return FALSE ; } if (ctrl->m_hWnd == NULL) { return FALSE ; } CRect tRect ; ctrl->GetWindowRect (&tRect) ; parent->ScreenToClient(&tRect) ; CRect pRect ; parent->GetClientRect(&pRect) ; tRect.bottom= pRect.bottom ; ctrl->MoveWindow(&tRect) ; // ここから上は,Visual Style が無効な exe の時に動作する { // ここから下は,Visual Style が有効な場合に必要 MoveWindow では変更されない? int minV = tRect.Height()/ctrl->GetItemHeight(0) ; if (minV >= 3) { minV-= 2 ; } if (minV <= 0) { minV = 1 ; } ctrl->SendMessage(CB_SETMINVISIBLE,minV) ; } return TRUE ; }
CB_SETCUEBANNER
CComboBox::SetCueBanner
Windows Vista コントロールの拡張
Windows Vista コモン コントロールの作成要件
サポートされなくなった ANSI API
x86 プロジェクトの x64 へのコピー
VC 6 以前から使用しているプロジェクトを,64 ビット用にコピーしてビルドすると以下のエラーになることがある.
1>—— ビルド開始: プロジェクト: Project, 構成: Release x64 ——
1>.x64_R10ProjectA.obj : fatal error LNK1112: モジュールのコンピューターの種類 ‘x64’ は対象コンピューターの種類 ‘X86’ と競合しています。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
「プロジェクトのプロパティページ」の「構成プロパティ」-「リンカ」-「コマンドライン」の「追加オプション」にある "/MACHINE:I386" を削除する.
MFC ファイルハンドラの登録で MSB3075
ビルド時に以下のエラーとなる.
—— ビルド開始: プロジェクト: ???Handlers, 構成: Debug Win32 ——
???Handlers.vcxproj -> C:\Users\???\Documents\Visual Studio 2010\Projects\???\Debug\???Handlers.dll
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(732,5): warning MSB3075: コマンド “regsvr32 /s “C:\Users\???\Documents\Visual Studio 2010\Projects\???\Debug\???Handlers.dll”” はコード 5 で終了しました。このコマンドを実行するための十分な権限があるか確認してください。
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(744,5): error MSB8011: 出力の登録に失敗しました。ユーザーごとのリダイレクトを有効にするか、引き上げられたアクセス許可を使用して、コマンド プロンプトからコンポーネントを登録してください。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
VS 2010 を「管理者として実行」して起動する.
または,「管理者として実行」した「コマンドプロンプト」での「RegSvr32」.
通常の「コマンドプロンプト」では以下のエラーとなる.
[Window Title]
RegSvr32
[Content]
モジュール “C:\Users\???\Documents\Visual Studio 2010\Projects\???\Debug\???Handlers.dll” は読み込まれましたが、DllRegisterServer への呼び出しはエラー コード 0x80070005 により失敗しました。
この問題の詳細については、エラー コードを検索語として入力してオンラインで検索してください。
レジストリ キーのオープンエラー
レジストリエディタで削除できないキーができてしまった.
[Window Title]
キーのオープン エラー
[Content]
・・・・….・・・・・・・・・笶,cF 潺ィ$<1S を開けません。
エラーによりこのキーを開けません。
詳細: 指定されたファイルが見つかりません。
[OK]
原因は,AfxGetApp()->m_pszProfileName をいじっていた関係で,
OpenMP を利用した時のバグでごみが設定された.
対応には,RegDelNull.exe を利用.
http://technet.microsoft.com/ja-jp/sysinternals/default.aspx
http://technet.microsoft.com/ja-jp/sysinternals/bb545027.aspx
http://technet.microsoft.com/ja-jp/sysinternals/bb897448(en-us).aspx
https://docs.microsoft.com/ja-jp/sysinternals/downloads/regdelnull
RegDelNull の使い方
削除したいキー名は "HKEY_CURRENT_USER\Software\???\???\_"
環境は,Windows 7
- コマンドプロンプトを管理者として実行.
- C:\Windows\system32> C:\Users\…\Regdelnull\RegDelNull.exe hkcu\Software\???\???\_
- 削除するか聞いてくるので,必要に応じて y
2021/11
レジストリエディタ 削除中にエラーが発生しました
Microsoft Touch Pack
BAMBOO CTH-460 では,インストールできない.
BAMBOO でのイベント
wacom Touch
http://www.wacomeng.com/touch/index.html