| ■ カレント(作業)ディレクトリの取得 |
| 標準関数を使う場合は、以下の通り。 char* _getcwd( char* buffer, int maxlen); buffer パス名の格納場所 maxlen パス名の最大長 また、SDKを使う場合は、 DWORD GetCurrentDirectory( DWORD nBufferLength, LPTSTR lpBuffer); nBufferLength バッファの長さ lpBuffer バッファへのポインタ |
| ■ メッセージ処理(待ち処理用) |
| 時間のかかる whileループ等の中で、他のウィンドウメッセージを処理する場合、 以下のコードを挿入する。 MSG message; if ( ::PeekMessage( &message, NULL, 0, 0, PM_REMOVE)) { ::TranslateMessage( &message); ::DispatchMessage( &message); } |
| ■ システムカラーを得る関数 |
| ウィンドウ、ボタンなどの現在のシステム設定色を得るためには、以下の関数を使う。 DWORD GetSysColor( int nIndex); nIndexは、COLOR_BTNFACEなどシステム定義の値を使う。 戻り値はCOLORREF |
| ■ 配列管理のためのクラス |
| 配列の管理を行う基本クラスは、 CArray StdAfx.hに必要なインクルードファイル #include <afxtempl.h> 実際の宣言方法 CArray<char*,char*> m_DebugArray; また、さらにタイプセーフなクラスは CTypedPtrArray で、実際の宣言方法は CTypedPtrArray <CPtrArray,CMyData*> m_arrMyData; のように使用すると使用時には m_arrMyData[0]->MyFunction( ) のようにキャストなしで使用できる。 |
| ■ ユーザー定義のウィンドウメッセージの実行 |
| 1. メッセージを定義する。(どこでも良い) #define WM_USERMSG (WM_USER + 100) 2. メッセージ処理ルーチンの登録. プログラムファイル. BEGIN_MESSAGE_MAP(CSample, CDialog) //{{AFX_MSG_MAP(CSample) //}}AFX_MSG_MAP ON_MESSAGE(WM_USERMSG, OnUserMessage) END_MESSAGE_MAP() 3. 処理ルーチン. 3-1. ヘッダーファイル. // 生成されたメッセージ マップ関数 //{{AFX_MSG(CSample) //}}AFX_MSG afx_msg LONG OnUserMessage( UINT wParam, LONG lParam); 3-2. プログラムファイル. LONG CSample::OnUserMessage( UINT wParam, LONG lParam) { char* s = (char*)wParam; return 0L; } 4. メッセージ送信 pSample->PostMessage( WM_USERMSG, (WPARAM)s2); // またはSendMessage() |
| ■ フローティングポップアップメニュー |
| (ビュー上でマウス右クリックを行うと出るメニュー) 1. 新しい空のメニューを作成する。 2. 左のトップレベルメニュー項目に適当な文字をタイプし、これに対応するポップ アップに目的とするメニュー項目を追加する。 3. WM_CONTEXTMENUメッセージを追加する。 void CMyView::OnContextMenu( CWnd *pWnd, CPoint point) { CMenu menu; menu.LoadMenu( IDR_MYFLOATINGMENU); menu.GetSubMenu( 0)->TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this); } |
| ■ 自分のプログラムのウィンドウを画面の最上位に表示する |
| GetParentOwner()等を使用し、最上位の親ウィンドウで、 SetWindowPos( &wndTop, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); を実行する。 常に(フォーカスを失っても)最上位に表示するには、wndTopMostを使用する. |
| ■ カーソルの変更(システムカーソル) |
| HCURSOR hCursor; hCursor = AfxGetApp()->LoadStandardCursor( IDC_ARROW); SetCursor( hCursor); |
| ■ マウスカーソル位置の取得 |
| POINT p; GetCursorPos( &p); |
| ■ GetLastErrorの処理 |
| よく、エラーに関しては、GetLastErrorを参照と書いてあるがエラーコードだけでその意味が不明である。エラー内容を表示するために以下のように行う。 エラーメッセージをTRACE文で表示させる例.(コピー&ペーストでどうぞ) LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
GetLastError(),
MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT), // デフォルト言語
( LPTSTR)&lpMsgBuf,
0,
NULL);
TRACE( "%s\n", lpMsgBuf);
LocalFree( lpMsgBuf);
|
| ■ INIファイルを操作する場合のファイル名 |
| GetPrivateProfileIntやWriteProfileStringなど、INIファイルのデータを使う場合、ファイル名は、相対パスでなく絶対パスを指定する。 例 "D:\\sample\\test.ini" |