📄 main.cpp
字号:
#include <windows.h>
#include <commctrl.h>
#include "resource.h"
#include "RuleSet.h"
#define WM_ADDRULE WM_USER + 9000
BOOL CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM);
BOOL CALLBACK AddRuleDlgProc(HWND,UINT,WPARAM,LPARAM);
void InitRuleList(HWND);
void InsertRuleToList(HWND,RULE,SIGN);
void FillForecastList(HWND,TABLE&);
TABLE GetForecastAnalyseTable(HWND hList);
bool ForecastAnalyse(SIGN_SET& InputString,HWND hRuleList,HWND hTableList,HWND hResultList);
HWND hAddDlg = NULL;
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrev,LPSTR lpCmdLine,int nShowCmd)
{
HWND hMain;
MSG msg;
InitCommonControls();
hMain = CreateDialog(hInst,MAKEINTRESOURCE(IDD_MAINDLG),NULL,MainWndProc);
ShowWindow(hMain,SW_SHOW);
while(GetMessage(&msg,NULL,0,0))
if (!IsDialogMessage(hMain,&msg) && !IsDialogMessage(hAddDlg,&msg))
DispatchMessage(&msg);
return 0;
}
BOOL CALLBACK MainWndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
TABLE Table;
RULE Rule;
SIGN StartSign;
HWND hRuleList,hTableList,hResultList;
SIGN_SET InputString;
TCHAR szInput[MAX_PATH];
HICON hIcon;
switch(msg)
{
case WM_INITDIALOG:
InitRuleList(GetDlgItem(hwnd,IDC_RULE_LIST));
hIcon = LoadIcon(GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_ICON1));
SendMessage(hwnd,WM_SETICON,ICON_SMALL,(LPARAM)hIcon);
return FALSE;
case WM_COMMAND:
if (LOWORD(wParam) == IDC_ADDRULE)
{ // 添加规则
if (hAddDlg == NULL)
{
hAddDlg = CreateDialog(NULL,MAKEINTRESOURCE(IDD_INPUTRULE),hwnd,AddRuleDlgProc);
ShowWindow(hAddDlg,SW_SHOW);
}
SetFocus(hAddDlg);
}
else if (LOWORD(wParam) == IDC_ANALYSE) // 进行预测分析
{
hRuleList = GetDlgItem(hwnd,IDC_RULE_LIST);
hTableList = GetDlgItem(hwnd,IDC_FORECAST_LIST);
hResultList = GetDlgItem(hwnd,IDC_ANALYSE_LIST);
GetDlgItemText(hwnd,IDC_INPUT,szInput,MAX_PATH);
InputString = (char *)szInput;
ForecastAnalyse(InputString,hRuleList,hTableList,hResultList);
}
else if (LOWORD(wParam) == IDC_RESET)
{ // 重新来过
Table.Reset();
InitRuleList(GetDlgItem(hwnd,IDC_RULE_LIST));
FillForecastList(GetDlgItem(hwnd,IDC_FORECAST_LIST),Table);
ListView_DeleteAllItems(GetDlgItem(hwnd,IDC_ANALYSE_LIST));
}
return TRUE;
case WM_ADDRULE: // 添加规则
Rule = *((RULE *)lParam);
StartSign = (SIGN)wParam;
InsertRuleToList(GetDlgItem(hwnd,IDC_RULE_LIST),Rule,StartSign);
return TRUE;
case WM_CLOSE:
if (hAddDlg) DestroyWindow(hAddDlg);
PostQuitMessage(0);
EndDialog(hwnd,0);
return TRUE;
}
return FALSE;
}
BOOL CALLBACK AddRuleDlgProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
TCHAR Left[2];
TCHAR Right[MAX_PATH];
TCHAR StartSign[2];
RULE Rule;
switch(msg)
{
case WM_COMMAND:
if (LOWORD(wParam) == IDC_ADD)
{ // 取得各项输入
GetDlgItemText(hwnd,IDC_LEFT,Left,2);
GetDlgItemText(hwnd,IDC_RIGHT,Right,MAX_PATH);
GetDlgItemText(hwnd,IDC_START,StartSign,2);
// 错误检查
if (lstrlen(Left) == 0 && lstrlen(StartSign) == 0)
{
MessageBox(hwnd,TEXT("请输入规则式的左部或者输入开始符号!\n"),
TEXT("输入不正确"),MB_OK | MB_ICONWARNING);
return TRUE;
}
// 向父窗口发送消息
if (Left[0] != 0)
{
Rule.Left = Left[0];
strcpy(Rule.Right,Right);
}
else
Rule.Left = END_SIGN;
if (StartSign[0] == 0)
StartSign[0] = END_SIGN;
SendMessage(GetParent(hwnd),WM_ADDRULE,StartSign[0],(LPARAM)&Rule);
// 清空各控件
SendMessage(GetDlgItem(hwnd,IDC_LEFT),EM_SETSEL,0,-1);
SetDlgItemText(hwnd,IDC_RIGHT,TEXT(""));
SetDlgItemText(hwnd,IDC_START,TEXT(""));
SetFocus(GetDlgItem(hwnd,IDC_LEFT));
}
else if (LOWORD(wParam) == IDC_CANCEL)
{
hAddDlg = NULL;
EndDialog(hwnd,0);
}
return TRUE;
case WM_CLOSE:
hAddDlg = NULL;
EndDialog(hwnd,0);
return TRUE;
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -