(二)图标和光标
TCHAR szName[] = TEXT("Icon and Cursor Example");
HICON hIconBig, hIconSmall;
HCURSOR hCur1, hCur2;
HMENU hMenu;
HINSTANCE hInst;
LRESULT CALLBACK ProcWinMain(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_CREATE:
hIconBig = LoadIcon(hInst, MAKEINTRESOURCE(IDI_BIG));
hIconSmall = LoadIcon(hInst, MAKEINTRESOURCE(IDI_SMALL));
hCur1 = LoadCursorFromFile(TEXT("1.ANI"));
hCur2 = LoadCursor(hInst, MAKEINTRESOURCE(IDC_CURSOR));
SendMessage(hWnd, WM_COMMAND, IDM_BIG, 0);
SendMessage(hWnd, WM_COMMAND, IDM_CUR1, 0);
return 0;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDM_EXIT:
DestroyWindow(hWnd);
PostQuitMessage(0);
return 0;
case IDM_BIG:
CheckMenuRadioItem(hMenu, IDM_BIG, IDM_SMALL, IDM_BIG, MF_BYCOMMAND);
SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIconBig);
return 0;
case IDM_SMALL:
CheckMenuRadioItem(hMenu, IDM_BIG, IDM_SMALL, IDM_SMALL, MF_BYCOMMAND);
SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIconSmall);
return 0;
case IDM_CUR1:
CheckMenuRadioItem(hMenu, IDM_CUR1, IDM_CUR2, IDM_CUR1, MF_BYCOMMAND);
SetClassLong(hWnd, GCL_HCURSOR, (LONG)hCur1);
return 0;
case IDM_CUR2:
CheckMenuRadioItem(hMenu, IDM_CUR1, IDM_CUR2, IDM_CUR2, MF_BYCOMMAND);
SetClassLong(hWnd, GCL_HCURSOR, (LONG)hCur2);
return 0;
}
break;
case WM_CLOSE:
DestroyWindow(hWnd);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
WNDCLASSEX stWndCls;
MSG stMsg;
HWND hMainWnd;
hInst = hInstance;
hMenu = LoadMenu(hInstance, MAKEINTRESOURCE(IDM_MAIN));
RtlZeroMemory(&stWndCls, sizeof(stWndCls));
stWndCls.cbWndExtra = 0;
stWndCls.cbClsExtra = 0;
stWndCls.hInstance = hInst;
stWndCls.cbSize = sizeof(WNDCLASSEX);
stWndCls.style = CS_HREDRAW | CS_VREDRAW;
stWndCls.lpfnWndProc = ProcWinMain;
stWndCls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
stWndCls.lpszClassName = szName;
stWndCls.lpszMenuName = NULL;
RegisterClassEx(&stWndCls);
hMainWnd = CreateWindowEx(WS_EX_CLIENTEDGE, szName, szName,
WS_OVERLAPPEDWINDOW, 500, 200, 300, 185, NULL, hMenu, hInstance, NULL);
ShowWindow(hMainWnd, SW_SHOWNORMAL);
UpdateWindow(hMainWnd);
while(GetMessage(&stMsg, NULL, 0, 0))
{
TranslateMessage(&stMsg);
DispatchMessage(&stMsg);
}
return stMsg.wParam;
}