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