(三)窗口子控件 #include <windows.h> #include "resource.h" HINSTANCE hInst; TCHAR szBuffer[128]; HBITMAP hBmp1 = 0, hBmp2 = 0, hTemp = 0; static int iScrPos = 2; BOOL CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_INITDIALOG: SendMessage(hDlg, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(hInst, MAKEINTRESOURCE(IDI_MAIN))); SendDlgItemMessage(hDlg, IDC_TITLETEXT, CB_ADDSTRING, 0, (LPARAM)TEXT("Hello World!")); SendDlgItemMessage(hDlg, IDC_TITLETEXT, CB_ADDSTRING, 0, (LPARAM)TEXT("你看到标题栏变化了吗?")); SendDlgItemMessage(hDlg, IDC_TITLETEXT, CB_ADDSTRING, 0, (LPARAM)TEXT("自定义")); SendDlgItemMessage(hDlg, IDC_TITLETEXT, CB_SETCURSEL, 0, (LPARAM)0); EnableWindow(GetDlgItem(hDlg, IDC_CUSTOMTEXT), FALSE); hBmp1 = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_1)); hBmp2 = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_2)); CheckDlgButton(hDlg, IDC_SHOWBMP, BST_CHECKED); CheckDlgButton(hDlg, IDC_ALOW, BST_CHECKED); CheckDlgButton(hDlg, IDC_MODALFRAME, BST_CHECKED); SendDlgItemMessage(hDlg, IDC_SCROLL, SBM_SETRANGE, 0, 100); return TRUE; case WM_CLOSE: DeleteObject(hBmp1); DeleteObject(hBmp2); EndDialog(hDlg, 0); return TRUE; case WM_COMMAND: switch(LOWORD(wParam)) { case IDCANCEL: DeleteObject(hBmp1); DeleteObject(hBmp2); EndDialog(hDlg, 0); return TRUE; case IDOK: hTemp = hBmp1; hBmp1 = hBmp2; hBmp2 = hTemp; /*hBmp1 == (HBITMAP)SendDlgItemMessage(hDlg, IDC_BMP, STM_GETIMAGE, IMAGE_BITMAP, (LPARAM)0) ? SendDlgItemMessage(hDlg, IDC_BMP, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBmp2) : SendDlgItemMessage(hDlg, IDC_BMP, STM_SETIMAGE, IMAGE_BITMAP,(LPARAM)hBmp1);*/ SendDlgItemMessage(hDlg, IDC_BMP, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBmp1); return TRUE; case IDC_ONTOP: if(BST_CHECKED == IsDlgButtonChecked(hDlg, IDC_ONTOP)) SetWindowPos(hDlg, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE); else SetWindowPos(hDlg, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE); return TRUE; case IDC_SHOWBMP: if(IsWindowVisible(GetDlgItem(hDlg, IDC_BMP))) ShowWindow(GetDlgItem(hDlg, IDC_BMP), SW_HIDE); else ShowWindow(GetDlgItem(hDlg, IDC_BMP), SW_SHOW); return TRUE; case IDC_ALOW: if(BST_CHECKED == IsDlgButtonChecked(hDlg, IDC_ALOW)) EnableWindow(GetDlgItem(hDlg, IDOK), TRUE); else EnableWindow(GetDlgItem(hDlg, IDOK), FALSE); return TRUE; case IDC_MODALFRAME: SetWindowLong(hDlg, GWL_STYLE, ~WS_THICKFRAME & GetWindowLong(hDlg, GWL_STYLE)); return TRUE; case IDC_THICKFRAME: SetWindowLong(hDlg, GWL_STYLE, WS_THICKFRAME | GetWindowLong(hDlg, GWL_STYLE)); return TRUE; case IDC_TITLETEXT: if(CBN_SELENDOK == HIWORD(wParam)) if(2 == SendDlgItemMessage(hDlg, IDC_TITLETEXT, CB_GETCURSEL, 0, 0)) { EnableWindow(GetDlgItem(hDlg, IDC_CUSTOMTEXT), TRUE); } else { SendDlgItemMessage(hDlg, IDC_TITLETEXT, CB_GETLBTEXT, SendDlgItemMessage(hDlg, IDC_TITLETEXT, CB_GETCURSEL, 0, 0), (LPARAM)szBuffer); SetWindowText(hDlg, szBuffer); EnableWindow(GetDlgItem(hDlg, IDC_CUSTOMTEXT), FALSE); } return TRUE; case IDC_CUSTOMTEXT: GetDlgItemText(hDlg, IDC_CUSTOMTEXT, szBuffer, sizeof(szBuffer)/sizeof(TCHAR)); SetWindowText(hDlg, szBuffer); return TRUE; } break; case WM_HSCROLL: switch(LOWORD(wParam)) { case SB_LINELEFT: iScrPos = --iScrPos; break; case SB_LINERIGHT: iScrPos = ++iScrPos; break; case SB_PAGELEFT: iScrPos = iScrPos - 10; break; case SB_PAGERIGHT: iScrPos = iScrPos + 10; break; case SB_THUMBPOSITION: case SB_THUMBTRACK: iScrPos = (int)HIWORD(wParam); break; } if(iScrPos < 0) iScrPos = 0; else if(iScrPos > 100) iScrPos = 100; SetDlgItemInt(hDlg, IDC_VALUE, iScrPos, FALSE); SendDlgItemMessage(hDlg, IDC_SCROLL, SBM_SETPOS, (WPARAM)iScrPos, (LPARAM)TRUE); return TRUE; } return FALSE; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow) { hInst = hInstance; DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_DIALOG), NULL, DlgProc, 0); return 0; }