📄 qssreadbotdlg.cpp
字号:
// QssReadBotDlg.cpp : implementation file
//
#include "stdafx.h"
#include "QssReadBot.h"
#include "QssReadBotDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include "ini.h"
#include "QssThread.h"
#define WM_MY_TRAY_NOTIFICATION WM_USER+1000
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CQssReadBotDlg dialog
CQssReadBotDlg::CQssReadBotDlg(CWnd* pParent /*=NULL*/)
: CDialog(CQssReadBotDlg::IDD, pParent), m_trayIcon(IDR_TRAYICON)
{
//{{AFX_DATA_INIT(CQssReadBotDlg)
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
// m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_hIcon = AfxGetApp()->LoadIcon( IDI_BOY ); // 加载应用程序图标
// 加载托盘图标设置
m_bShowTrayNotifications = TRUE;
m_bShutdown = FALSE;
}
void CQssReadBotDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CQssReadBotDlg)
DDX_Control(pDX, IDC_COMBO7, m_ComBo7);
DDX_Control(pDX, IDC_COMBO9, m_ComBo9);
DDX_Control(pDX, IDC_COMBO8, m_ComBo8);
DDX_Control(pDX, IDC_COMBO6, m_ComBo6);
DDX_Control(pDX, IDC_COMBO5, m_ComBo5);
DDX_Control(pDX, IDC_COMBO4, m_ComBo4);
DDX_Control(pDX, IDC_COMBO3, m_ComBo3);
DDX_Control(pDX, IDC_COMBO2, m_ComBo2);
DDX_Control(pDX, IDC_COMBO10, m_ComBo10);
DDX_Control(pDX, IDC_COMBO1, m_ComBo1);
DDX_Control(pDX, IDC_CHECK9, m_Check9);
DDX_Control(pDX, IDC_CHECK8, m_Check8);
DDX_Control(pDX, IDC_CHECK7, m_Check7);
DDX_Control(pDX, IDC_CHECK6, m_Check6);
DDX_Control(pDX, IDC_CHECK5, m_Check5);
DDX_Control(pDX, IDC_CHECK4, m_Check4);
DDX_Control(pDX, IDC_CHECK3, m_Check3);
DDX_Control(pDX, IDC_CHECK2, m_Check2);
DDX_Control(pDX, IDC_CHECK10, m_Check10);
DDX_Control(pDX, IDC_CHECK1, m_Check1);
DDX_Control(pDX, IDC_CHECKALL, m_CheckAll);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CQssReadBotDlg, CDialog)
//{{AFX_MSG_MAP(CQssReadBotDlg)
ON_MESSAGE(WM_MY_TRAY_NOTIFICATION, OnTrayNotification)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_SETQSS, OnSetqss)
ON_BN_CLICKED(IDC_CHECKALL, OnCheckall)
ON_BN_CLICKED(IDC_CANCELQSS, OnCancelqss)
ON_BN_CLICKED(IDC_SETQSSSAVE, OnSetqsssave)
ON_WM_CREATE()
ON_COMMAND(ID_APP_OPEN, OnAppOpen)
ON_COMMAND(ID_APP_SUSPEND, OnAppSuspend)
ON_WM_SIZE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CQssReadBotDlg message handlers
BOOL CQssReadBotDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// CenterWindow() ; // 居中显示窗口
// TODO: Add extra initialization here
///////////////////////////////////////////////////////////////////////////
// 建立初始化文件
int i = 0 ;
CString strCom[10] ;
int strThread[10] ;
CIni ini ;
LPCTSTR hFileName = "C:\\QSS.ini" ;
ini.SetPathName( hFileName ) ;
HANDLE hFile = CreateFile( hFileName, GENERIC_READ|GENERIC_WRITE, 0,0, OPEN_ALWAYS ,0, NULL) ;
if ( hFile == INVALID_HANDLE_VALUE )
{
AfxMessageBox( "生成 QSS 初始化文件失败!" ) ;
}
else
{
if ( CloseHandle( hFile ) == 0 )
return FALSE;
if ( ERROR_ALREADY_EXISTS == GetLastError() )
{
// 取得通讯端口
strCom[0] = ini.GetString( "QSS", "QSS1", _T("(null)") ) ;
strCom[1] = ini.GetString( "QSS", "QSS2", _T("(null)") ) ;
strCom[2] = ini.GetString( "QSS", "QSS3", _T("(null)") ) ;
strCom[3] = ini.GetString( "QSS", "QSS4", _T("(null)") ) ;
strCom[4] = ini.GetString( "QSS", "QSS5", _T("(null)")) ;
strCom[5] = ini.GetString( "QSS", "QSS6", _T("(null)")) ;
strCom[6] = ini.GetString( "QSS", "QSS7", _T("(null)")) ;
strCom[7] = ini.GetString( "QSS", "QSS8", _T("(null)")) ;
strCom[8] = ini.GetString( "QSS", "QSS9", _T("(null)")) ;
strCom[9] = ini.GetString( "QSS", "QSS10", _T("(null)") ) ;
// 取得线程开关
strThread[0] = ini.GetInt( "THREAD", "THREAD1", 0 , BASE_DECIMAL ) ;
strThread[1] = ini.GetInt( "THREAD", "THREAD2", 0 , BASE_DECIMAL ) ;
strThread[2] = ini.GetInt( "THREAD", "THREAD3", 0 , BASE_DECIMAL ) ;
strThread[3] = ini.GetInt( "THREAD", "THREAD4", 0 , BASE_DECIMAL ) ;
strThread[4] = ini.GetInt( "THREAD", "THREAD5", 0 , BASE_DECIMAL ) ;
strThread[5] = ini.GetInt( "THREAD", "THREAD6", 0 , BASE_DECIMAL ) ;
strThread[6] = ini.GetInt( "THREAD", "THREAD7", 0 , BASE_DECIMAL ) ;
strThread[7] = ini.GetInt( "THREAD", "THREAD8", 0 , BASE_DECIMAL ) ;
strThread[8] = ini.GetInt( "THREAD", "THREAD9", 0 , BASE_DECIMAL ) ;
strThread[9] = ini.GetInt( "THREAD", "THREAD10", 0 , BASE_DECIMAL ) ;
// 取得数据库连接字符串
strServerName = ini.GetString( "DATABASE", "Server", _T("(null)") ) ;
strDatabaseName = ini.GetString( "DATABASE", "DATABASE", _T("(null)") ) ;
strUserID = ini.GetString( "DATABASE", "UID", _T("(null)") ) ;
strUserPassword = ini.GetString( "DATABASE", "PWD", _T("(null)") ) ;
// 取得定时器值
uTimerElapse = 60000 ;
uTimerElapse = ini.GetInt( "TIMER", "ThreadTimer", 0 , BASE_DECIMAL ) ;
}
else
{
// 0 不启动线程 1 启动线程
ini.WriteInt( "THREAD", "THREAD1", 0, BASE_DECIMAL ) ;
ini.WriteInt( "THREAD", "THREAD2", 0 , BASE_DECIMAL ) ;
ini.WriteInt( "THREAD", "THREAD3", 0 , BASE_DECIMAL) ;
ini.WriteInt( "THREAD", "THREAD4", 0 , BASE_DECIMAL) ;
ini.WriteInt( "THREAD", "THREAD5", 0 , BASE_DECIMAL) ;
ini.WriteInt( "THREAD", "THREAD6", 0 , BASE_DECIMAL ) ;
ini.WriteInt( "THREAD", "THREAD7", 0 , BASE_DECIMAL ) ;
ini.WriteInt( "THREAD", "THREAD8", 0 , BASE_DECIMAL) ;
ini.WriteInt( "THREAD", "THREAD9", 0 , BASE_DECIMAL) ;
ini.WriteInt( "THREAD", "THREAD10", 0, BASE_DECIMAL ) ;
strThread[0] = 0 ;
strThread[1] = 0 ;
strThread[2] = 0 ;
strThread[3] = 0 ;
strThread[4] = 0 ;
strThread[5] = 0 ;
strThread[6] = 0 ;
strThread[7] = 0 ;
strThread[8] = 0 ;
strThread[9] = 0 ;
ini.WriteString( "QSS", "QSS1", "com1" ) ;
ini.WriteString( "QSS", "QSS2", "com2" ) ;
ini.WriteString( "QSS", "QSS3", "com3" ) ;
ini.WriteString( "QSS", "QSS4", "com4" ) ;
ini.WriteString( "QSS", "QSS5", "com5" ) ;
ini.WriteString( "QSS", "QSS6", "com1" ) ;
ini.WriteString( "QSS", "QSS7", "com2" ) ;
ini.WriteString( "QSS", "QSS8", "com3" ) ;
ini.WriteString( "QSS", "QSS9", "com4" ) ;
ini.WriteString( "QSS", "QSS10", "com5" ) ;
strCom[0] = "com1" ;
strCom[1] = "com2" ;
strCom[2] = "com3" ;
strCom[3] = "com4" ;
strCom[4] = "com5" ;
strCom[5] = "com1" ;
strCom[6] = "com2" ;
strCom[7] = "com3" ;
strCom[8] = "com4" ;
strCom[9] = "com5" ;
ini.WriteString( "DATABASE", "Server", "127.0.0.1" ) ;
ini.WriteString( "DATABASE", "DATABASE", "cenaircon" ) ;
ini.WriteString( "DATABASE", "UID", "sa" ) ;
ini.WriteString( "DATABASE", "PWD", "sql" ) ;
strServerName = "127.0.0.1" ;
strDatabaseName = "cenaircon" ;
strUserID = "sa" ;
strUserPassword = "sql" ;
uTimerElapse = 60000 ;
ini.WriteInt( "TIMER", "ThreadTimer", uTimerElapse, BASE_DECIMAL ) ;
}
// 设置通讯端口与QSS编号对应
for ( i = 0 ; i < 10 ; i++ )
{
strQSS[i] = strCom[i] ;
}
// 写入从 INI 文件 读取的设置值
if ( strCom[0].GetLength() == 4 )
strCom[0] = strCom[0].Mid( 3,1 ) ;
else
strCom[0] = strCom[0].Mid( 3,2 ) ;
i = atoi( strCom[0] ) ;
m_ComBo1.SetCurSel( i - 1 ) ;
if ( strCom[0].GetLength() == 4 )
strCom[1] = strCom[1].Mid( 3,1 ) ;
else
strCom[1] = strCom[1].Mid( 3,2 ) ;
i = atoi( strCom[1] ) ;
m_ComBo2.SetCurSel( i - 1 ) ;
if ( strCom[0].GetLength() == 4 )
strCom[2] = strCom[2].Mid( 3,1 ) ;
else
strCom[2] = strCom[2].Mid( 3,2 ) ;
i = atoi( strCom[2] ) ;
m_ComBo3.SetCurSel( i - 1 ) ;
if ( strCom[0].GetLength() == 4 )
strCom[3] = strCom[3].Mid( 3,1 ) ;
else
strCom[3] = strCom[3].Mid( 3,2 ) ;
i = atoi( strCom[3] ) ;
m_ComBo4.SetCurSel( i - 1 ) ;
if ( strCom[0].GetLength() == 4 )
strCom[4] = strCom[4].Mid( 3,1 ) ;
else
strCom[4] = strCom[4].Mid( 3,2 ) ;
i = atoi( strCom[4] ) ;
m_ComBo5.SetCurSel( i - 1 ) ;
if ( strCom[0].GetLength() == 4 )
strCom[5] = strCom[5].Mid( 3,1 ) ;
else
strCom[5] = strCom[5].Mid( 3,2 ) ;
i = atoi( strCom[5] ) ;
m_ComBo6.SetCurSel( i - 1 ) ;
if ( strCom[0].GetLength() == 4 )
strCom[6] = strCom[6].Mid( 3,1 ) ;
else
strCom[6] = strCom[6].Mid( 3,2 ) ;
i = atoi( strCom[6] ) ;
m_ComBo7.SetCurSel( i - 1 ) ;
if ( strCom[0].GetLength() == 4 )
strCom[7] = strCom[7].Mid( 3,1 ) ;
else
strCom[7] = strCom[7].Mid( 3,2 ) ;
i = atoi( strCom[7] ) ;
m_ComBo8.SetCurSel( i - 1 ) ;
if ( strCom[0].GetLength() == 4 )
strCom[8] = strCom[8].Mid( 3,1 ) ;
else
strCom[8] = strCom[8].Mid( 3,2 ) ;
i = atoi( strCom[8] ) ;
m_ComBo9.SetCurSel( i - 1 ) ;
if ( strCom[0].GetLength() == 4 )
strCom[9] = strCom[9].Mid( 3,1 ) ;
else
strCom[9] = strCom[9].Mid( 3,2 ) ;
i = atoi( strCom[9] ) ;
m_ComBo10.SetCurSel( i - 1 ) ;
// 设置线程启动检查框
m_Check1.SetCheck( strThread[0] ) ;
m_Check2.SetCheck( strThread[1] ) ;
m_Check3.SetCheck( strThread[2] ) ;
m_Check4.SetCheck( strThread[3] ) ;
m_Check5.SetCheck( strThread[4] ) ;
m_Check6.SetCheck( strThread[5] ) ;
m_Check7.SetCheck( strThread[6] ) ;
m_Check8.SetCheck( strThread[7] ) ;
m_Check9.SetCheck( strThread[8] ) ;
m_Check10.SetCheck( strThread[9] ) ;
}
///////////////////////////////////////////////////////////////////////////
// 设置定时器延时时间
//uTimerElapse = 60000 ;
// 初始化临界区对象
InitializeCriticalSection( &criticalSection ) ;
// 初始化线程: 设置 10 个线程,并启动
dwThreadID1 = 0 ;
dwThreadID2 = 0 ;
dwThreadID3 = 0 ;
dwThreadID4 = 0 ;
dwThreadID5 = 0 ;
dwThreadID6 = 0 ;
dwThreadID7 = 0 ;
dwThreadID8 = 0 ;
dwThreadID9 = 0 ;
dwThreadID10 = 0 ;
SECURITY_ATTRIBUTES securityAttributes ;
ZeroMemory( &securityAttributes, sizeof(SECURITY_ATTRIBUTES)) ;
securityAttributes.nLength = sizeof(SECURITY_ATTRIBUTES) ;
HANDLE hHandleQSS1 = NULL ;
HANDLE hHandleQSS2 = NULL ;
HANDLE hHandleQSS3 = NULL ;
HANDLE hHandleQSS4 = NULL ;
HANDLE hHandleQSS5 = NULL ;
HANDLE hHandleQSS6 = NULL ;
HANDLE hHandleQSS7 = NULL ;
HANDLE hHandleQSS8 = NULL ;
HANDLE hHandleQSS9 = NULL ;
HANDLE hHandleQSS10 = NULL ;
// 1-5
if ( strThread[0] == 1 )
{
hHandleQSS1 = CreateThread( NULL, 1024, ( LPTHREAD_START_ROUTINE )Thread1, NULL, 0 , &dwThreadID1) ;
if ( NULL != hHandleQSS1 )
SetDlgItemText( IDC_STATUS_DISPLAY1, "读取QSS 1 的线程一已运行" ) ;
}
if ( strThread[1] == 1 )
{
hHandleQSS2 = CreateThread( NULL, 1024, ( LPTHREAD_START_ROUTINE )Thread2, NULL, 0 , &dwThreadID2) ;
if ( NULL != hHandleQSS2 )
SetDlgItemText( IDC_STATUS_DISPLAY2, "读取QSS 2 的线程二已运行" ) ;
}
if ( strThread[2] == 1 )
{
hHandleQSS3 = CreateThread( NULL, 1024, ( LPTHREAD_START_ROUTINE )Thread3, NULL, 0 , &dwThreadID3) ;
if ( NULL != hHandleQSS3 )
SetDlgItemText( IDC_STATUS_DISPLAY3, "读取QSS 3 的线程三已运行" ) ;
}
if ( strThread[3] == 1 )
{
hHandleQSS4 = CreateThread( NULL, 1024, ( LPTHREAD_START_ROUTINE )Thread4, NULL, 0 , &dwThreadID4) ;
if ( NULL != hHandleQSS4 )
SetDlgItemText( IDC_STATUS_DISPLAY4, "读取QSS 4 的线程四已运行" ) ;
}
if ( strThread[4] == 1 )
{
hHandleQSS5 = CreateThread( NULL, 1024, ( LPTHREAD_START_ROUTINE )Thread5, NULL, 0 , &dwThreadID5) ;
if ( NULL != hHandleQSS5 )
SetDlgItemText( IDC_STATUS_DISPLAY5, "读取QSS 5 的线程五已运行" ) ;
}
// 6-10
if ( strThread[5] == 1 )
{
hHandleQSS6 = CreateThread( NULL, 1024, ( LPTHREAD_START_ROUTINE )Thread6, NULL, 0 , &dwThreadID6) ;
if ( NULL != hHandleQSS6 )
SetDlgItemText( IDC_STATUS_DISPLAY6, "读取QSS 6 的线程六已运行" ) ;
}
if ( strThread[6] == 1 )
{
hHandleQSS7 = CreateThread( NULL, 1024, ( LPTHREAD_START_ROUTINE )Thread7, NULL, 0 , &dwThreadID7) ;
if ( NULL != hHandleQSS7 )
SetDlgItemText( IDC_STATUS_DISPLAY7, "读取QSS 7 的线程七已运行" ) ;
}
if ( strThread[7] == 1 )
{
hHandleQSS8 = CreateThread( NULL, 1024, ( LPTHREAD_START_ROUTINE )Thread8, NULL, 0 , &dwThreadID8) ;
if ( NULL != hHandleQSS8 )
SetDlgItemText( IDC_STATUS_DISPLAY8, "读取QSS 8 的线程八已运行" ) ;
}
if ( strThread[8] == 1 )
{
hHandleQSS9 = CreateThread( NULL, 1024, ( LPTHREAD_START_ROUTINE )Thread9, NULL, 0 , &dwThreadID9) ;
if ( NULL != hHandleQSS9 )
SetDlgItemText( IDC_STATUS_DISPLAY9, "读取QSS 9 的线程九已运行" ) ;
}
if ( strThread[9] == 1 )
{
hHandleQSS10 = CreateThread( NULL, 1024, ( LPTHREAD_START_ROUTINE )Thread10, NULL, 0 , &dwThreadID10) ;
if ( NULL != hHandleQSS10 )
SetDlgItemText( IDC_STATUS_DISPLAY10, "读取QSS 10 的线程十已运行" ) ;
}
// 连接数据库
CString strDBConnection ;
HRESULT hr ;
//hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
// PROVIDER = SQLOLEDB
//strDBConnection = "PROVIDER = SQLOLEDB;Server=" + strServerName + ";DATABASE=" ;
strDBConnection = "driver={SQL Server};Server=" + strServerName + ";DATABASE=" ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -