www.pudn.com > awlogin.rar > WndProc.cpp


#include "awlogin.h" 
#include  
 
extern 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; 
}