📄 window.c
字号:
{
pNode=searchnode(pHead,No);
if( searchnode(pHead,No)==NULL)
MessageBox(hDlgWnd,"该学号不存在,请重新输入!",Prompt,MB_OK | MB_ICONERROR);
else
{
if(MessageBox(hDlgWnd,"是否删除该学生信息?",Prompt,MB_OKCANCEL | MB_ICONQUESTION)==IDOK)
{
pHead=deletenode(pHead,pNode); //删除结点
SaveList(pHead,FileName); //保存文件
InvalidateRect(g_hWnd,NULL,TRUE); //强制重绘
}
}
}
}
}
break;
case IDCANCEL:
EndDialog(hDlgWnd,IDOK);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_CLOSE ://对话框关闭消息
EndDialog(hDlgWnd,0);
ShowWindow(hWnd,SW_SHOWMAXIMIZED);
break;
default:
break;
}
return 0;
}
//修改
LRESULT CALLBACK DlgProc_Edit(HWND hDlgWnd,//对话框句柄
UINT message,//消息参数
WPARAM wParam,
LPARAM lParam)
{
Student std;
HWND hTopWnd;
HWND hStdIdWnd,hNameWnd,hAddressWnd,hSexWnd,hZipWnd,hPhoneWnd,hEditWnd;
RECT rc,Drc;
int wmID;
Node * pNode=NULL;
char No[20];
//得到句柄
hStdIdWnd = GetDlgItem(hDlgWnd, IDC_Del_Id);
hNameWnd = GetDlgItem(hDlgWnd, IDC_Name);
hAddressWnd = GetDlgItem(hDlgWnd, IDC_Address);
hSexWnd = GetDlgItem(hDlgWnd, IDC_Sex);
hZipWnd = GetDlgItem(hDlgWnd, IDC_Zip);
hPhoneWnd = GetDlgItem(hDlgWnd, IDC_Phone);
hEditWnd=GetDlgItem(hDlgWnd,IDC_QUERY);
switch (message)
{
case WM_INITDIALOG://对话框初始消息
hTopWnd = GetDesktopWindow();
GetWindowRect(hTopWnd,&rc);
GetWindowRect(hDlgWnd,&Drc);
SetWindowPos(hDlgWnd,HWND_TOP,(rc.right - Drc.right + Drc.left)/2,(rc.bottom - Drc.bottom + Drc.top )/2,Drc.right -Drc.left,Drc.bottom - Drc.top,SWP_SHOWWINDOW);
return 1;
break;
case WM_COMMAND:
wmID=LOWORD(wParam);
switch(wmID)
{
case IDC_QUERY:
{
GetWindowText(hStdIdWnd,No,10);
if(strlen(FileName)==0)
MessageBox(hDlgWnd,"你还未新建或打开一个文件,请先进行此操作!",Prompt,MB_OK|MB_ICONERROR);
else
{
if(strlen(No)==0)
MessageBox(hDlgWnd,"学号不能为空,请重新输入所要删除的学号!",Prompt,MB_OK|MB_ICONERROR);
else
{
pNode=searchnode(pHead,No);
if( searchnode(pHead,No)==NULL)
MessageBox(hDlgWnd,"该学号不存在,请重新输入!",Prompt,MB_OK | MB_ICONERROR);
else
{
//显示所要修改学生的信息(姓名、性别、地址、邮编、电话)
SetWindowText(hNameWnd,pNode->m_stu.name );
SetWindowText(hSexWnd,pNode->m_stu.sex);
SetWindowText(hAddressWnd,pNode->m_stu.address);
SetWindowText(hZipWnd,pNode->m_stu.zip);
SetWindowText(hPhoneWnd,pNode->m_stu.phone);
}
}
}
}
break;
case IDOK:
{
GetWindowText(hStdIdWnd,No,10);
if(strlen(No)==0)
MessageBox(hDlgWnd,"学号不能为空,请输入所要删除的学号!",Prompt,MB_OK|MB_ICONERROR);
else
{
if(MessageBox(hDlgWnd,"是否修改该学生信息?",Prompt,MB_OKCANCEL | MB_ICONQUESTION)==IDOK)
{
GetWindowText(hStdIdWnd,std.no,sizeof(std.no));
GetWindowText(hNameWnd,std.name,sizeof(std.name));
GetWindowText(hSexWnd,std.sex,sizeof(std.sex));
GetWindowText(hAddressWnd,std.address,sizeof(std.address));
GetWindowText(hZipWnd,std.zip,sizeof(std.zip));
GetWindowText(hPhoneWnd,std.phone,sizeof(std.phone));
updatenode(pHead,std); //修改结点
SaveList(pHead,FileName);
InvalidateRect(g_hWnd,NULL,TRUE); //强制重绘
}
}
}
break;
case IDCANCEL:
EndDialog(hDlgWnd,IDOK);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_CLOSE : //对话框关闭消息
EndDialog(hDlgWnd,0);
ShowWindow(hWnd,SW_SHOWMAXIMIZED);
break;
default:
break;
}
return 0;
}
//关于我们
LRESULT CALLBACK DlgProc_About(HWND hDlgWnd, //对话框句柄
UINT message, //消息参数
WPARAM wParam,
LPARAM lParam)
{
HWND hTopWnd;
RECT rc,Drc;
Node * pNode=NULL;
switch (message)
{
case WM_INITDIALOG: //对话框初始消息
hTopWnd = GetDesktopWindow();
GetWindowRect(hTopWnd,&rc);
GetWindowRect(hDlgWnd,&Drc);
SetWindowPos(hDlgWnd,HWND_TOP,(rc.right - Drc.right + Drc.left)/2,(rc.bottom - Drc.bottom + Drc.top )/2,Drc.right -Drc.left,Drc.bottom - Drc.top,SWP_SHOWWINDOW);
return 1;
break;
case WM_CLOSE : //对话框关闭消息
EndDialog(hDlgWnd,0);
ShowWindow(hWnd,SW_SHOWMAXIMIZED);
break;
default:
break;
}
return 0;
}
//主窗口回调函数
LRESULT CALLBACK WndProc(HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
char d[100];
int wmID;
HDC hdc = NULL;
Node *pTmp=NULL; //链表上的临时节点
PAINTSTRUCT ps;
HPEN hPen,hNullPen,hOldPen;
POINT pt;
HBRUSH hBkBrush,hOldBrush;
RECT rc;
int i,j,val,hal,icol,irow;
g_hWnd=hWnd; //主窗口的全局句柄
switch (message)
{
case WM_PAINT:
hdc = BeginPaint(hWnd,&ps);
//创建画笔
hPen = CreatePen(PS_SOLID,1,RGB(255,255,255));
hNullPen = GetStockObject(NULL_PEN);
//创建画刷
hBkBrush = CreateSolidBrush(RGB(153,204,0));
//画背景
hOldPen = SelectObject(hdc,hNullPen);
hOldBrush = SelectObject(hdc,hBkBrush);
//获取客户区大小
GetClientRect(hWnd,&rc);
val = (rc.right - rc.left) / COL;
hal = (rc.bottom - rc.top) / ROW;
Rectangle(hdc,rc.left,rc.top,rc.right,rc.bottom);
//画第一行
SelectObject(hdc,hBkBrush); //第一行背景色
for(i = 0;i <= COL;i++)
{
Rectangle(hdc,rc.left + i * (val),rc.top,rc.left+ (i+1) * val,rc.top + hal);
}
//文字背景色
SetBkColor(hdc,RGB(153,204,0));
//文字颜色
SetTextColor(hdc,RGB(255,255,255));
TextOut(hdc,rc.left + val + val/2-22,hal/2-7,"姓 名",8);
TextOut(hdc,rc.left + val/2-22,hal/2-6,"学 号",8);
TextOut(hdc,rc.left + val*3 + val/2-22,hal/2-7,"性 别",8);
TextOut(hdc,rc.left + val*2 + val/2-30,hal/2-7,"家庭地址",8);
TextOut(hdc,rc.left + val*4 + val/2-30,hal/2-7,"邮政编码",8);
TextOut(hdc,rc.left + val*5 + val/2-30,hal/2-7,"电话号码",8);
//画表格
//将画笔选入设备环境
SelectObject(hdc,hPen);
//画列线
for(i = 0;i <= COL +1;i++)
{
icol = rc.left + i * val;
MoveToEx(hdc,icol,rc.top,&pt);
LineTo(hdc,icol,rc.bottom-hal-9);
}
if(QueryFlat!=-1)
pTmp=pNode1;
else
pTmp=pHead;
//文字背景色
SetBkColor(hdc,RGB(153,204,0));
//文字颜色
SetTextColor(hdc,RGB(0,0,0));
//画行线
for(j = 0,i=1;j <ROW;j++)
{
irow = rc.top + j * hal;
MoveToEx(hdc,rc.left,irow,&pt);
LineTo(hdc,rc.right,irow);
//把学生信息写在窗体上
for(;pTmp!=NULL;pTmp=pTmp->m_pNext)
{
TextOut(hdc,rc.left + val + val/2-22,irow+i * hal+hal/2-10,pTmp->m_stu.name,strlen(pTmp->m_stu.name));
TextOut(hdc,rc.left + val/2-22,irow+i * hal+ hal/2-10,pTmp->m_stu.no,strlen(pTmp->m_stu.no));
TextOut(hdc,rc.left + val*3 + val/2-8,irow+i * hal+hal/2-10,pTmp->m_stu.sex,strlen(pTmp->m_stu.sex));
TextOut(hdc,rc.left + val*2 + val/2-50,irow+i * hal+hal/2-10,pTmp->m_stu.address,strlen(pTmp->m_stu.address));
TextOut(hdc,rc.left + val*4 + val/2-25,irow+i * hal+hal/2-10,pTmp->m_stu.zip,strlen(pTmp->m_stu.zip));
TextOut(hdc,rc.left + val*5 + val/2-40,irow+i * hal+hal/2-10,pTmp->m_stu.phone,strlen(pTmp->m_stu.phone));
i++;
}
}
sprintf(d,"文件中共有%d条记录",i-1);
TextOut(hdc,rc.top+650,rc.bottom-23,d,strlen(d));
//还原画刷
SelectObject(hdc,hOldBrush);
//还原画笔
SelectObject(hdc,hOldPen);
//删除画笔
DeleteObject(hPen);
EndPaint(hWnd,&ps);
break;
case WM_COMMAND:
wmID=LOWORD(wParam);
switch(wmID)
{
case ID_NEW:
DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG_NEW),hWnd,(DLGPROC)DlgProc_New);
break;
case ID_OPEN:
DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG_OPEN),hWnd,(DLGPROC)DlgProc_Open);
break;
case ID_ADD:
DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG_ADD),hWnd,(DLGPROC)DlgProc_Add);
break;
case ID_DEL:
DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG_DEL),hWnd,(DLGPROC)DlgProc_Del);
break;
case ID_EDIT:
DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG_EDIT),hWnd,(DLGPROC)DlgProc_Edit);
break;
case ID_FIND:
DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG_FIND),hWnd,(DLGPROC)DlgProc_Find);
break;
case ID_ABOUT:
DialogBox(hInst,MAKEINTRESOURCE(IDD_DIALOG_ABOUT),hWnd,(DLGPROC)DlgProc_About);
break;
case ID_EXIT:
if(MessageBox(hWnd,"确定退出本系统吗?",Prompt,MB_OKCANCEL| MB_ICONQUESTION)==IDOK)
PostMessage(hWnd,WM_CLOSE,0,0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_DESTROY: //销毁窗口消息
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd,message,wParam,lParam); //默认窗口回调函数
}
return 0; //必须有返回值
}
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
char* lpCmdLine,
int nCmdShow)
{
HWND hWnd;
MSG msg;
HACCEL hAccelTable;
// 1. 注册窗口类
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX); // 此结构体的大小
wcex.style = CS_OWNDC;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance,(char *)IDI_ICON1);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = "SDK";
wcex.hIconSm = LoadIcon(hInstance,(char *)IDI_ICON1);
wcex.lpszMenuName = (char *)IDR_MENU; //显示菜单
RegisterClassEx(&wcex);
// 2. 创建窗口
hWnd = CreateWindow( "SDK",
" 学 生 通 迅 管 理",
(WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU),
0,0,
800,600,
NULL,
NULL,
hInstance,
NULL);
// 3. 显示窗口
ShowWindow(hWnd, SW_SHOW);
// 4. 消息循环
hAccelTable = LoadAccelerators(hInstance,MAKEINTRESOURCE(IDR_ACCELERATOR1)); //载入加速键表
while (GetMessage(&msg,NULL,0,0))
{
if(!TranslateAccelerator(hWnd,hAccelTable,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -