Iwao Dev

気付いたことをメモしています.

この画面は、簡易表示です

メニューが左にポップアップ…

1 ヶ月半ぐらい前,メニューが左にポップアップされる様になっていることに気がついた.
タブレット BAMBOO CTH-460 を接続した時に設定をいじってしまった様で,この設定にやっとたどり着いた.
(別に困っていたわけではないので,特に調べていたわけではありません.)


//mish.myds.me/wordpress/dev/2011/03/01/

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。


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

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  • カテゴリー:

「無効な引数が発生しました。」

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  
—————————

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  • カテゴリー:

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 スキップ ==========

リビルドしても効果なし.


2010/05/27 追記
ファイルサーバも含め再起動をかけたら正しくビルドできるようになった.

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。


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

HelpVSty.hxx

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  • カテゴリー:

CStatic をはみ出さない様に

ダイアログ上の CStatic をはみ出さない様に描画する

CDC::IntersectClipRect 

   ...
   CClientDC dc(&m_Image) ;
   CRect  rect ;
   m_Image.GetClientRect(rect) ;
   dc.IntersectClipRect(rect) ;
   ...
この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  • カテゴリー:

VC 6 プロファイラを有効に

VC 6 で「プロファイルを行う」を有効にする設定
「プロジェクトの設定」-「リンク」タブ-カテゴリ「一般」のダイアログで,「Alt」+「E」
または,プロジェクトのオプションに "/Profile" を追加.

特定のモジュールに限定
「プロファイル」-「詳細設定」で
/EXCALL /INC ComPro01.obj /inc ComUse02.obj

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。

  • カテゴリー:

コンボボックスの高さ指定

//*******************************************************************************
//	関数名	:コンボボックスの高さを,親ウィンドウの下に合わせる
//	作成日	:’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

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。



    top

    %d人のブロガーが「いいね」をつけました。