www.pudn.com > awlogin.rar > WndProc.cpp
#include "awlogin.h" #includeextern HWND hwnd, hwndGRO,hwndSEC,hwndINFOGRO,hwndINFOSEC, hwndOK,hwndCONFIG,hwndCANCEL,hwndCANCELMIN; extern HFONT currentfont; extern COLORREF textcolor; extern HINSTANCE hInstance; extern TCHAR szMsg[128],szTitle[16],CurrentDir[261]; extern HDC hdc,hdcmemok; extern HBITMAP hBitmap; extern LOGBRUSH logbrush; extern HBRUSH hbrush; HANDLE hThread; LPDWORD TheadID; STARTUPINFO si; PROCESS_INFORMATION pi; LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static int sel; LPDRAWITEMSTRUCT pdis ; int iIndex; PAINTSTRUCT ps ; RECT rc; TCHAR SECTIONNAME[255]; POINT point; UINT uID;//定义任务栏中图标的ID值。 UINT uMsg;//定义当用户对任务栏图标进行操作时,程序windows向程序发送的消息。 NOTIFYICONDATA nid; static HMENU htaskmenu; htaskmenu=LoadMenu(hInstance,MAKEINTRESOURCE(POPMENU)); htaskmenu=GetSubMenu(htaskmenu,0); nid.cbSize=sizeof(NOTIFYICONDATA); nid.uID=IDI_MIR; nid.hIcon=LoadIcon((HINSTANCE)hInstance,LPSTR(IDI_MIR)); nid.hWnd=hwnd; strcpy(nid.szTip,szTitle); nid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP; nid.uCallbackMessage=WM_NOTIFYICON; switch (message) { case WM_LBUTTONDOWN: SendMessage(hwnd,WM_NCLBUTTONDOWN,HTCAPTION,0L); return 0 ; case WM_CREATE: //画窗口 hInstance = ((LPCREATESTRUCT) lParam)->hInstance ; hdc=GetDC(hwnd); BeginPath(hdc); MoveToEx(hdc,1,3,NULL); LineTo(hdc,1,397); LineTo(hdc,15,397); LineTo(hdc,15,395); LineTo(hdc,25,395); LineTo(hdc,25,397); LineTo(hdc,40,397); LineTo(hdc,40,395); LineTo(hdc,325,395); LineTo(hdc,325,397); LineTo(hdc,340,397); LineTo(hdc,340,395); LineTo(hdc,350,395); LineTo(hdc,350,397); LineTo(hdc,364,397); LineTo(hdc,364,2); LineTo(hdc,350,2); LineTo(hdc,350,4); LineTo(hdc,333,4); LineTo(hdc,332,2); LineTo(hdc,316,2); LineTo(hdc,312,4); LineTo(hdc,308,4); LineTo(hdc,304,0); LineTo(hdc,300,0); LineTo(hdc,295,4); LineTo(hdc,40,4); LineTo(hdc,40,3); LineTo(hdc,24,3); LineTo(hdc,24,4); LineTo(hdc,16,4); LineTo(hdc,16,3); LineTo(hdc,3,3); EndPath(hdc); SetWindowRgn(hwnd,PathToRegion(hdc),NULL); DeleteObject(hdc); //加载各种空间... hwndOK =CreateWindowEx(NULL, "button", "", WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,45,348, 62, 20,hwnd,HMENU(ID_OK), hInstance, NULL); hwndCONFIG =CreateWindowEx(NULL, "button", "", WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,150,348, 62, 20,hwnd,HMENU(ID_CONFIG), hInstance, NULL); hwndCANCEL =CreateWindowEx(NULL, "button", "", WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,258,348, 62, 20,hwnd,HMENU(ID_CANCEL), hInstance, NULL); hwndCANCELMIN =CreateWindowEx(NULL, "button", "", WS_CHILD | WS_VISIBLE | BS_OWNERDRAW,330,22, 19, 16,hwnd,HMENU(ID_CANCELMIN), hInstance, NULL); hwndSEC =CreateWindowEx(NULL, "COMBOBOX", "", WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST | WS_TABSTOP|WS_VSCROLL,90,293, 245,200,hwnd,HMENU(IDC_SEC), hInstance, NULL); hwndGRO =CreateWindowEx(NULL, "COMBOBOX", "", WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST | WS_TABSTOP|WS_VSCROLL,90,320, 245,200,hwnd,HMENU(IDC_GRO), hInstance, NULL); hwndINFOSEC=CreateWindowEx(NULL, "static", szTitle, WS_CHILD | WS_VISIBLE,32,230, 305, 20,hwnd,HMENU(IDS_SECINFO), hInstance, NULL); hwndINFOGRO=CreateWindowEx(NULL, "static", szTitle, WS_CHILD | WS_VISIBLE,32,245, 305, 40,hwnd,HMENU(IDS_GROINFO), hInstance, NULL); //设置组合框 sel=1; comblistSEC(1) ; wsprintf(SECTIONNAME,"SECTION%d",1); GetPrivateProfileStringA(SECTIONNAME,_TEXT("GROUPNOTICE"),"请设置游戏服务器",SECTIONNAME,256,CurrentDir); SetWindowText(hwndINFOSEC,SECTIONNAME); return 0 ; case WM_PAINT: hdc = BeginPaint (hwnd, &ps) ; EndPaint (hwnd, &ps) ; return 0 ; case WM_DRAWITEM: pdis = (LPDRAWITEMSTRUCT) lParam ; switch (pdis->CtlID) { case ID_OK: hdcmemok = CreateCompatibleDC (hdc) ; hBitmap = LoadBitmap (hInstance, MAKEINTRESOURCE(IDB_FORM)) ; SelectObject (hdcmemok, hBitmap); if (pdis->itemState & ODS_SELECTED) { BitBlt (pdis->hDC,0, 0, 62,20,hdcmemok,0, 418, SRCCOPY); } else { BitBlt (pdis->hDC,0, 0, 62,20,hdcmemok,0, 398, SRCCOPY); } DeleteObject(hdcmemok); DeleteObject(hBitmap); SendMessage(hwnd,WM_PAINT,0,0); return 0 ; case ID_CANCEL: hdcmemok = CreateCompatibleDC (hdc) ; hBitmap = LoadBitmap (hInstance, MAKEINTRESOURCE(IDB_FORM)) ; SelectObject (hdcmemok, hBitmap); if (pdis->itemState & ODS_SELECTED) { BitBlt (pdis->hDC,0, 0, 62,20,hdcmemok,124, 418, SRCCOPY); } else { BitBlt (pdis->hDC,0, 0, 62,20,hdcmemok,124, 398, SRCCOPY); } DeleteObject(hdcmemok); DeleteObject(hBitmap); SendMessage(hwnd,WM_PAINT,0,0); return 0 ; case ID_CANCELMIN: hdcmemok = CreateCompatibleDC (hdc) ; hBitmap = LoadBitmap (hInstance, MAKEINTRESOURCE(IDB_FORM)) ; SelectObject (hdcmemok, hBitmap); if (pdis->itemState & ODS_SELECTED) { BitBlt (pdis->hDC,0, 0, 19,16,hdcmemok,186, 418, SRCCOPY); } else { BitBlt (pdis->hDC,0, 0, 19,16,hdcmemok,186, 398, SRCCOPY); } DeleteObject(hdcmemok); DeleteObject(hBitmap); SendMessage(hwnd,WM_PAINT,0,0); return 0 ; case ID_CONFIG: hdcmemok = CreateCompatibleDC (hdc) ; hBitmap = LoadBitmap (hInstance, MAKEINTRESOURCE(IDB_FORM)) ; SelectObject (hdcmemok, hBitmap); if (pdis->itemState & ODS_SELECTED) { BitBlt (pdis->hDC,0, 0, 62,20,hdcmemok,62, 418, SRCCOPY); } else { BitBlt (pdis->hDC,0, 0, 62,20,hdcmemok,62, 398, SRCCOPY); } DeleteObject(hdcmemok); DeleteObject(hBitmap); return 0 ; } return 0 ; case WM_COMMAND: switch(LOWORD(wParam)) { case IDM_WNDDISP://当用户选择了显示后windows给程序发送 ShowWindow(hwnd,1); Shell_NotifyIcon(NIM_DELETE,&nid); return 0; case IDM_ABOUT: MessageBox(hwnd,szTitle,szTitle,0); //DialogBox(hInstance,MAKEINTRESOURCE(IDD_ABOUT), hwnd, (DLGPROC)AboutDlgFunc); return 0; case IDC_SEC: if (LOWORD (wParam) == IDC_SEC && HIWORD (wParam) == LBN_SELCHANGE) { sel = SendMessage (hwndSEC, CB_GETCURSEL, 0, 0) +1; wsprintf(SECTIONNAME,"SECTION%d",sel); GetPrivateProfileStringA(SECTIONNAME,_TEXT("GROUPNOTICE"),"请设置游戏服务器",SECTIONNAME,256,CurrentDir); rc.top=230; rc.right=32; rc.bottom=290; rc.left=440; InvalidateRect(hwnd,&rc,true); SendMessage(hwnd,WM_PAINT,0,0); SetWindowText(hwndINFOSEC,SECTIONNAME); comblistGRO(sel); } return 0; case IDC_GRO: if (LOWORD (wParam) == IDC_GRO && HIWORD (wParam) == LBN_SELCHANGE) { iIndex = SendMessage (hwndGRO, CB_GETCURSEL, 0, 0) ; TCHAR SECTIONNAME[50]; wsprintf(SECTIONNAME,"GROUP%d",sel*100+iIndex); GetPrivateProfileStringA(SECTIONNAME,_TEXT("SERVERNOTICE"),"请设置游戏服务器1",SECTIONNAME,256,CurrentDir); SetWindowText(hwndINFOGRO,SECTIONNAME); rc.top=230; rc.right=32; rc.bottom=290; rc.left=440; InvalidateRect(hwnd,&rc,true); SendMessage(hwnd,WM_PAINT,0,0); } return 0; case IDM_EXITPROG: case ID_CANCEL: case ID_CANCELMIN: // if (MessageBox(hwnd, szMsg, szTitle, MB_ICONINFORMATION|MB_YESNO) == IDYES) // { TerminateProcess(pi.hProcess,-1); DestroyWindow(hwnd); // } return 0; case ID_CONFIG: // DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIG_CONFIG), hwnd, (DLGPROC)ConfigDlgFunc); return 0; case ID_OK: SaveFile(); hThread=CreateThread(NULL,0,ThreadProc,NULL,NULL,TheadID); CloseHandle(hThread); ShowWindow(hwnd,0); Shell_NotifyIcon(NIM_ADD,&nid); return 0; } case WM_CTLCOLORSTATIC: SetTextColor((HDC)wParam,0X000000ff); SetBkMode((HDC)wParam,TRANSPARENT); SetBkColor((HDC)wParam,TRANSPARENT); logbrush.lbHatch = 0; logbrush.lbStyle = BS_NULL; logbrush.lbColor = 0XFFFF0000; hbrush = CreateBrushIndirect(&logbrush); return (long)hbrush; case WM_CTLCOLOREDIT: case WM_CTLCOLORLISTBOX: case WM_CTLCOLORBTN: SetTextColor((HDC)wParam,textcolor); SetBkMode((HDC)wParam,OPAQUE); SetBkColor((HDC)wParam,0x00ffff00); logbrush.lbHatch = 0; logbrush.lbStyle = BS_SOLID; logbrush.lbColor = 0x00ffff00; hbrush = CreateBrushIndirect(&logbrush); return (long)hbrush; case WM_NOTIFYICON: //当对任务栏的图标操作时windows发送WM_NOTIFYICON消息 uID=wParam;//图标的ID值 uMsg=lParam;//用户对任务栏图标进行的是什么操作 if (uID=IDI_MIR) { switch(uMsg) { case WM_RBUTTONDOWN://如果是单击右键 GetCursorPos(&point);//获得单击的坐标位置 TrackPopupMenuEx(htaskmenu,TPM_VERTICAL|TPM_LEFTALIGN,point.x,point.y,hwnd,NULL);//在单击的位置上显示弹出菜单 break; case WM_LBUTTONDBLCLK: ShowWindow(hwnd,1); Shell_NotifyIcon(NIM_DELETE,&nid); break; } } break; case WM_DESTROY: DeleteObject (hBitmap) ; Shell_NotifyIcon(NIM_DELETE,&nid); ShellExecute(NULL,NULL,"explorer", "http://www.awgame.com", NULL,SW_SHOW); PostQuitMessage (0) ; return 0 ; case WM_CLOSE: DeleteObject(hbrush); DeleteObject(currentfont); } return DefWindowProc (hwnd, message, wParam, lParam) ; } BOOL CALLBACK ConfigDlgFunc(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps ; switch (uMsg) { case WM_LBUTTONDOWN: SendMessage(hWndDlg,WM_NCLBUTTONDOWN,HTCAPTION,0L); break ; case WM_INITDIALOG: { /* hdc=GetDC(hWndDlg); BeginPath(hdc); MoveToEx(hdc,1,3,NULL); LineTo(hdc,1,397); LineTo(hdc,15,397); LineTo(hdc,15,395); LineTo(hdc,25,395); LineTo(hdc,25,397); LineTo(hdc,40,397); LineTo(hdc,40,395); LineTo(hdc,325,395); LineTo(hdc,325,397); LineTo(hdc,340,397); LineTo(hdc,340,395); LineTo(hdc,350,395); LineTo(hdc,350,397); LineTo(hdc,364,397); LineTo(hdc,364,2); LineTo(hdc,350,2); LineTo(hdc,350,4); LineTo(hdc,333,4); LineTo(hdc,332,2); LineTo(hdc,316,2); LineTo(hdc,312,4); LineTo(hdc,308,4); LineTo(hdc,304,0); LineTo(hdc,300,0); LineTo(hdc,295,4); LineTo(hdc,40,4); LineTo(hdc,40,3); LineTo(hdc,24,3); LineTo(hdc,24,4); LineTo(hdc,16,4); LineTo(hdc,16,3); LineTo(hdc,3,3); EndPath(hdc); SetWindowRgn(hWndDlg,PathToRegion(hdc),NULL); DeleteObject(hdc);*/ break ; } case WM_PAINT: hdc = BeginPaint (hWndDlg, &ps); hdcmemok = CreateCompatibleDC (hdc) ; hBitmap = LoadBitmap (hInstance, MAKEINTRESOURCE(IDB_CONFIG)) ; SelectObject (hdcmemok, hBitmap); BitBlt (hdc,0, 0, 62,20,hdcmemok,62, 418, SRCCOPY); MoveToEx(hdc,1,3,NULL); LineTo(hdc,350,395); EndPaint (hWndDlg, &ps) ; return 0 ; case WM_COMMAND: { case IDC_OKBTN: EndDialog(hWndDlg, FALSE) ; break ; case IDC_CANCELBTN: EndDialog(hWndDlg, FALSE) ; break ; } default: break ; } return FALSE ; } DWORD WINAPI ThreadProc (PVOID pParam) { GetStartupInfo(&si); CreateProcess(0, ".\\mir.dat", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); DWORD rc = WaitForSingleObject(pi.hProcess,INFINITE); SendMessage(hwnd,WM_COMMAND,ID_CANCEL,0); // MessageBox(hwnd,"","",NULL); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); return 0; }