■ カレント(作業)ディレクトリの取得
標準関数を使う場合は、以下の通り。
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"