(見てる方へ)他の項目もさることながら、特にこちらについては自信が無いことを前もって報告しておきます。

VC++ ver.6 を使用中。

link

以下の分類は主観(各所で色々な話題が取り扱われている)

全般

SDK

WTL

COM

MFC

ド素人的メモ

miscellaneous

ライブラリ

ある関数に必要なヘッダとライブラリはヘルプに記載されている。ヘッダは include すれば良い。ライブラリは

のいずれかで追加する(両者はどう違うのだ?)

デバッグ

ステップオーバー
main routineのみのtrace。そこでcallされた関数内部に行かない
ステップイン
main routineでcallされた関数内部に行く。外部ライブラリのコードの海に突き進むことも。
ステップアウト
現在のroutineを抜けて呼出し元に戻る

ウィンドウプロシージャ

WindowClassで定義。戻り値は多分重要でない。 デフォルトの挙動は DefWindowProc で実現されるので、望むメッセージ処理の後にこれを入れると良い。CALLBACK修飾子が宣言されねばならない。

同種のコントロールたちを、例えばVBのコントロール配列の様にして一括して処理したい

以下VC++超初心者のホームページから。

IDを手動でdefineするのが一番楽そうだ。

ActiveX

グラフ

SDKに限った話ではないが、VCでグラフを実現するのはそう簡単なことではなさそうだ。自分で描画することはできるが面倒くさいのでパス。そこで既存のものを使いたくなるわけだが、標準でついてくるのはMSChartくらい。VBから使うのは簡単だが、VCから使うにはかなりのクセモノである上に文書も殆ど無い。定番がどれなのかもよくわからない。CodeGuruでも乱立してるみたいだ。

ダイアログボックス

ダイアログボックスを使って得た入力値をプログラム中で使うにはどうすれば良いか?

グローバル変数を使うのが一つの解であるが、DialogBoxParamがベスト(多分)。まずやりとりしたいデータを構造体にしておいて、最後の引数にそこへのポインタを指定すると良い。

コモンコントロール

SDK雛型

シングルウィンドウ

#include<windows.h>
const char lpClassName[]="SDKTemplate";    // window class

LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
    switch (msg) {
        case WM_COMMAND:
        switch(LOWORD(wp)) {
            //case BUTTON:
            //break;
            }
        break;
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
        }
        return DefWindowProc(hwnd , msg , wp , lp);
}

int WINAPI WinMain(HINSTANCE hInst , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow ) {
    HWND hwnd;
    MSG msg;
    WNDCLASS winc;

    winc.style	= CS_HREDRAW | CS_VREDRAW;
    winc.lpfnWndProc = WndProc;
    winc.cbClsExtra = 0;
    winc.cbWndExtra = 0;
    winc.hInstance = hInst;
    winc.hIcon	= LoadIcon(NULL , IDI_APPLICATION);
    winc.hCursor = LoadCursor(NULL , IDC_ARROW);
    winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    winc.lpszMenuName = NULL;
    winc.lpszClassName = lpClassName;

    if (!RegisterClass(&winc)) return 0;

    hwnd = CreateWindow(
        lpClassName ,    // class name
        TEXT("My SDK") , // window name
        WS_OVERLAPPEDWINDOW | WS_VISIBLE ,
        100 , 100 , // horizontal, vertical position
        200 , 200 , // width and height
        NULL ,	// parent window
        NULL ,	// menu
        hInst , // application instance
        NULL // window-creation data
    );

    if (hwnd == NULL) return 0;

    while (GetMessage(&msg , NULL , 0 , 0)) DispatchMessage(&msg);
    return msg.wParam;
}

ダイアログベース

以上を参考に作成しましたが、理解不足に基づくミスを私が犯してる可能性は大いにあります。

#include<windows.h>
#include"resource.h"

BOOL CALLBACK DialogProc(HWND hDlg, UINT msg, WPARAM wp, LPARAM lp)
{
  switch(msg){
  case WM_INITDIALOG:
    // initialize
    return TRUE;
  case WM_COMMAND:
    switch(LOWORD(wp)){
    case IDOK:
      EndDialog(hDlg,LOWORD(wp));
      return TRUE;
    case IDCANCEL:
      EndDialog(hDlg,LOWORD(wp));
      return TRUE;
    }
    break;
  case WM_CLOSE:
    PostQuitMessage(0);
    break;
  }
  return FALSE;
}


int WINAPI WinMain(HINSTANCE hinst,HINSTANCE hPreInst, LPSTR pCmdLine,int nCmdShow)
{
  DialogBox(hinst,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DialogProc);
  return FALSE;
}

GDI+

jpeg表示に便利だそうだ。

platformSDKが必要みたいだ。