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


#include "awlogin.h"
#include <process.h>

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, &amt;ps) ;
EndPaint (hwnd, &amt;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 &amt; 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 &amt; 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 &amt; 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 &amt; 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,&amt;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 &amt;&amt; 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,&amt;rc,true);
SendMessage(hwnd,WM_PAINT,0,0);
SetWindowText(hwndINFOSEC,SECTIONNAME);
comblistGRO(sel);
}
return 0;
case IDC_GRO:
if (LOWORD (wParam) == IDC_GRO &amt;&amt; 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,&amt;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,&amt;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(&amt;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(&amt;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(&amt;point);//获得单击的坐标位置
TrackPopupMenuEx(htaskmenu,TPM_VERTICAL|TPM_LEFTALIGN,point.x,point.y,hwnd,NULL);//在单击的位置上显示弹出菜单
break;
case WM_LBUTTONDBLCLK:
ShowWindow(hwnd,1);
Shell_NotifyIcon(NIM_DELETE,&amt;nid);
break;
}
}
break;

case WM_DESTROY:
DeleteObject (hBitmap) ;
Shell_NotifyIcon(NIM_DELETE,&amt;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, &amt;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, &amt;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(&amt;si);
CreateProcess(0, ".\\mir.dat", NULL, NULL, FALSE, 0, NULL, NULL, &amt;si, &amt;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;
}