第21章 マクロを使おう


さて、前回作った「dialog01.exe」でダイアローグボックスの取り扱いで うんざりしていませんか?

今回は、もう少しわかりやすい方法を紹介します。 実は、windowsx.hというファイルの中に、 マクロがどっさり入っています。 この中のマクロを使うと、少しわかりやすくなります。

int initDlg(HWND hDlgWnd) { int i; // SetWindowText(GetDlgItem(hDlgWnd, IDC_EDIT1), (LPCTSTR)edit_str); Edit_SetText(GetDlgItem(hDlgWnd, IDC_EDIT1), (LPCTSTR)edit_str); // SetScrollRange(GetDlgItem(hDlgWnd, IDC_SCROLL1), SB_CTL, ScrMin, ScrMax, TRUE); ScrollBar_SetRange(GetDlgItem(hDlgWnd, IDC_SCROLL1), ScrMin, ScrMax, TRUE); ShowScroll(hDlgWnd); for ( i = 0; i <= 4; i++ ) // SendMessage(GetDlgItem(hDlgWnd, IDC_LIST1), LB_INSERTSTRING, (WPARAM)i, (LPARAM)liststr[i]); ListBox_InsertString(GetDlgItem(hDlgWnd, IDC_LIST1), i, liststr[i]); // SendMessage(GetDlgItem(hDlgWnd, IDC_LIST1), LB_SETCURSEL, (WPARAM)ListNo, 0L);//??? ListBox_SetCurSel(GetDlgItem(hDlgWnd, IDC_LIST1), ListNo); for ( i = 0; i <= 3; i++ ) // SendMessage(GetDlgItem(hDlgWnd, IDC_COMBO1), CB_INSERTSTRING, (WPARAM)i, (LPARAM)combostr[i]); ComboBox_InsertString(GetDlgItem(hDlgWnd, IDC_COMBO1), i, combostr[i]); // SendMessage(GetDlgItem(hDlgWnd, IDC_COMBO1), CB_SETCURSEL, (WPARAM)ComboNo, 0L); ComboBox_SetCurSel(GetDlgItem(hDlgWnd, IDC_COMBO1), ComboNo); return 0; }

前章のinitDlg関数の中身をマクロで書き換えると、ざっとこのようになります。 もとの、コードとマクロを眺めてみましょう。何となく規則性があると思いませんか。 まず、マクロではコントロールの名前が来ます。そして、アンダースコア、何をするかという 順番で名前になっています。わかりやすいですね。

int getDlg(HWND hDlgWnd) { //GetWindowText(GetDlgItem(hDlgWnd, IDC_EDIT1), edit_str, sizeof(edit_str)); GetDlgItemText(hDlgWnd, IDC_EDIT1, edit_str, sizeof(edit_str)); //ScrPos = GetScrollPos(GetDlgItem(hDlgWnd, IDC_SCROLL1), SB_CTL); ScrPos = ScrollBar_GetPos(GetDlgItem(hDlgWnd, IDC_SCROLL1)); //ListNo = (int)(DWORD)SendMessage(GetDlgItem(hDlgWnd, IDC_LIST1), LB_GETCURSEL, 0L, 0L); ListNo = ListBox_GetCurSel(GetDlgItem(hDlgWnd, IDC_LIST1)); //ComboNo = (int)(DWORD)SendMessage(GetDlgItem(hDlgWnd, IDC_COMBO1), CB_GETCURSEL, 0L, 0L); ComboNo = ComboBox_GetCurSel(GetDlgItem(hDlgWnd, IDC_COMBO1)); return 0; }

マクロにすると、若干短くなりますね。

int ShowScroll(HWND hWnd) { if (ScrPos < ScrMin) ScrPos = ScrMin; if (ScrPos > ScrMax) ScrPos = ScrMax; // SetScrollPos(GetDlgItem(hWnd, IDC_SCROLL1), SB_CTL, ScrPos, TRUE); ScrollBar_SetPos(GetDlgItem(hWnd, IDC_SCROLL1), ScrPos, TRUE); ShowStatic(hWnd); return 0; }

だんだん見ていくと、マクロの想像がつきますね。

int ShowStatic(HWND hWnd) { char str[8]; wsprintf(str, "%3d", ScrPos); //SetWindowText(GetDlgItem(hWnd, IDC_STATIC1), (LPCTSTR)str); Static_SetText(GetDlgItem(hWnd, IDC_STATIC1), str); return 0; }

マクロを使うか、使わないかは全く好みの問題です。 それと、当たり前ですがマクロを使うときは

#include <windowsx.h>

を忘れないで下さい。


[SDK Index] [総合Index] [Previous Chapter] [Next Chapter]

Update Apr/20/1997 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。