ホーム » メモ (ページ 26)
「メモ」カテゴリーアーカイブ
CArray の要素のコピー
FaceA::FaceA (const FaceA& other)
{
// ループによるコピー
Faces.SetSize(other.Faces.GetSize()) ;
for (int index=0 ; index<other.Faces.GetSize() ; index++) {
Faces[index] = other.Faces[index] ;
}
// CArray::Copy
Faces.Copy(other.Faces) ;
}
VC 6 リリース版では体感できなかったが,少なくともデバッグ版では Copy の方がはるかに速かった.
VC 2010 $(IncludePath)
Microsoft.Cpp.Xxxx.user.props の場所
C:\Users\(UserName)\AppData\Local\Microsoft\MSBuild\v4.0
http://msdn.microsoft.com/ja-jp/library/ee855621.aspx
CImage::Draw 部分のメモ
// AtlImage.h より
inline BOOL CImage::Draw(
_In_ HDC hDestDC,
_In_ int xDest,
_In_ int yDest,
…
{
…
#if WINVER >= 0x0500
if( ((m_iTransparentColor != -1) || (m_clrTransparentColor != (COLORREF)-1)) && IsTransparencySupported() ) {
bResult = ::TransparentBlt( hDestDC, xDest, yDest, … , GetTransparentRGB() ) ;
}
else if( m_bHasAlphaChannel && IsTransparencySupported() ) {
BLENDFUNCTION bf;
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0;
bf.SourceConstantAlpha = 0xff;
bf.AlphaFormat = AC_SRC_ALPHA;
bResult = ::AlphaBlend( hDestDC, xDest, yDest, … , bf) ;
}
else
#endif // WINVER >= 0x0500
{
bResult = ::StretchBlt( hDestDC, xDest, yDest, … , SRCCOPY) ;
}
…
return( bResult );
}
EMF への保存
Displaying a Picture and Storing It in an Enhanced Metafile
http://msdn.microsoft.com/en-us/library/dd183568.aspx
2020/12
E_MF.hxx
EMF_fnc.hxx
DIB の縮小表示
サイズの大きな画像を縮小して表示すると汚くなる
SetStretchBltMode の指定が必要.
http://msdn.microsoft.com/ja-jp/library/cc428734.aspx
画像付 RecentFile の追加
RecentFileMF クラスを利用して,画像でのメニュー表示を可能にする
- ODMenu を利用可能な様に追加する.
アプリケーションクラスのヘッダなどで MetaFile.hxx をインクルードして,ODMMetaFile を利用可能に. - ID_RECENT_FILE_00 ~ の必要数分のリソースを作成する.
- アプリケーションクラスのヘッダに,include と変数を追加する.
#include "RecentFM.hxx"
RecentFileMF RcntFM ; - アプリケーションクラスのコンストラクタに RecnetFileMF の初期化を追加する.
: RcntFM(_T("RecentFileMF"),30) - InitInstance で,RcntFM のデータを読込む処理を追加する.
{
RcntFM.Read() ;
RcntFM.SetStartID(ID_RECENT_FILE_00) ;
} - アプリケーションクラスに,範囲でコマンドハンドラを追加する.
ON_COMMAND_RANGE (ID_RECENT_FILE_00,ID_RECENT_FILE_29,OnRecentFile)
void CXxxxApp::OnRecentFile(UINT nID)
{
CString selFile = RcntFM.GetSelectFile(nID) ;
AfxGetApp()->OpenDocumentFile(selFile) ;
} - ドキュメントクラスのファイルの読み書きの時に,次の様にドキュメントと対応する画像を指定する.
{
CXxxxApp* app = (CXxxxApp*)AfxGetApp() ;
app->RcntFM.Add(fileName,emfName) ;
}
- さらに,ドキュメントに対するファイル名をステータスバーなどに表示するために,CMainFrame に追加する.
// ツールチップの表示データの更新
BOOL CMainFrame::OnToolTipText(UINT id, NMHDR *pNMHDR, LRESULT *pResult)
{
BOOL ret = CFrameWnd:: OnToolTipText(id,pNMHDR,pResult) ;
Prompt:: OnToolTipText(id,pNMHDR,pResult) ;
return ret ;
}
// ステータスバーの表示データの更新
void CMainFrame::GetMessageString(UINT nID, CString &rMessage) const
{
CFrameWnd:: GetMessageString(nID,rMessage) ;
Prompt:: GetMessageString(nID,rMessage) ;
}
2012/06/12 追記
VC6 でドロップタウンが有効にならない場合,CBRS_SIZE_DYNAMIC を外す.
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | …
… | CBRS_FLYBY/* | CBRS_SIZE_DYNAMIC*/) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
ODMenu が有効にならない場合,
#include “ODMenu.hxx”
#include “WinMFC.cxx”
Prompt が有効にならない場合,
#include “Prompt.hxx”
#include “RecentFM.cxx”
ODMenu は有効ではあるが,何も表示されない
手動で追加していたため,メッセージマップの修正漏れ
ON_WM_MEASUREITEM()
ON_WM_DRAWITEM()
2019/09/20
OnMeasureItem , OnDrawItem が呼ばれない.
内部的には ODMenu::ModifyMenu が呼ばれていない.
WinMFC.cxx を読み込む前に ODMenu.hxx が必要.
App.h 内の include の最後辺りに ODMenu.hxx の追加で対応可能.
PSAPI
EnumProcesses
EnumProcessModules
GetModuleFileNameEx
http://cid-535f5973454c1292.office.live.com/self.aspx/.Public/MFC/PStatus.hxx.txt
プロセスID から,HWND を求める.
DWORD pid = processID ;
EnumWin ew ;
INT_PTR wCount = ew.GetCount() ;
for (INT_PTR wIndex=0 ; wIndex<wCount ; wIndex++) {
HWND hwnd = ew.GetWinHandle(wIndex) ;
DWORD wpid = 0 ;
GetWindowThreadProcessId(hwnd,&wpid) ;
if (pid == wpid) {
…
break ;
}
}
コンボボックスの高さ指定
//******************************************************************************* // 関数名 :コンボボックスの高さを,親ウィンドウの下に合わせる // 作成日 :’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
Microsoft Touch Pack
BAMBOO CTH-460 では,インストールできない.
BAMBOO でのイベント
wacom Touch
http://www.wacomeng.com/touch/index.html