今回は、もう少しわかりやすい方法を紹介します。 実は、windowsx.hというファイルの中に、 マクロがどっさり入っています。 この中のマクロを使うと、少しわかりやすくなります。
前章のinitDlg関数の中身をマクロで書き換えると、ざっとこのようになります。 もとの、コードとマクロを眺めてみましょう。何となく規則性があると思いませんか。 まず、マクロではコントロールの名前が来ます。そして、アンダースコア、何をするかという 順番で名前になっています。わかりやすいですね。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; }
マクロにすると、若干短くなりますね。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