多对话框管理
新建两个对话框
- 设置焦点顺序,使用ctrl+d,然后点选顺序。
- IDOK是个特殊的ID,回车键会默认点击它。
- ESC默认是IDCANCEL
- strcmp是C语言的字符串比较函数。
代码:
// test3.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "resource.h"
#include "stdio.h"
BOOL CALLBACK MainProc(
HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
char s[256];
sprintf(s,"uMsg=0x%x,wParam=%d,lParam=%d \n", uMsg,wParam,lParam);
OutputDebugString(s);
switch(uMsg){
case WM_COMMAND:
{
switch (LOWORD(wParam)){
case IDCANCEL:
EndDialog(hwndDlg,IDCANCEL);
return FALSE;
case IDOK:
EndDialog(hwndDlg,IDCANCEL);
return FALSE;
}
return FALSE;
}
}
return FALSE;
}
BOOL CALLBACK LoginProc(
HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
switch(uMsg){
case WM_COMMAND:
{
switch (LOWORD(wParam)){
case IDCANCEL:
EndDialog(hwndDlg,IDCANCEL);
return FALSE;
case IDOK:
{
char sName[20];
char sPass[20];
GetDlgItemText(hwndDlg,IDC_NAME,sName,sizeof(sName));
GetDlgItemText(hwndDlg,IDC_PASS,sPass,sizeof(sPass));
if(0==strcmp("admin",sName) && 0==strcmp("pass",sPass)){
EndDialog(hwndDlg,IDOK);
}
else
MessageBox(hwndDlg,"pass error","prompt",MB_OK);
return FALSE;
}
}
return FALSE;
}
}
return FALSE;
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
int nRet = DialogBox(hInstance,(LPCSTR)IDD_DIALOG_LOGIN,NULL,LoginProc);
if(nRet==IDCANCEL)
return -1;
DialogBox(hInstance,(LPCSTR)IDD_DIALOG_MAIN, NULL,MainProc);
return 0;
}
运行效果:
输入 admin password,回车进入主界面。
添加删除item的实现代码:
void CTest4Dlg::OnAdd()
{
CString str;
GetDlgItemText(IDC_NUMB,str);
CListCtrl* pList = (CListCtrl*)GetDlgItem(IDC_LIST);
int nCount = pList->GetItemCount();
pList->InsertItem(nCount,str);
GetDlgItemText(IDC_NAME,str);
pList->SetItemText(nCount,1,str);
GetDlgItemText(IDC_SALARY,str);
pList->SetItemText(nCount,2,str);
}
void CTest4Dlg::OnDel()
{
CListCtrl* pList = (CListCtrl*)GetDlgItem(IDC_LIST);
int nSel = pList->GetSelectionMark();
if(nSel<0){
AfxMessageBox("please select one row.");
}
pList->DeleteItem(nSel);
}