1.增加顶部工具条;
2.Robot cmd测试页面增加Robot命令的响应结果;
3.CMaster增加start, stop函数,准备编写调试逻辑;
| | |
| | | return 0; |
| | | } |
| | | |
| | | int CEFEM::SendHome(int seq) |
| | | int CEFEM::robotSendHome(int seq, ONWRITED onWritedBlock/* = nullptr*/) |
| | | { |
| | | SERVO::ROBOT_CMD_PARAM cmd = {}; |
| | | cmd.sequenceNo = static_cast<short>(seq); |
| | | cmd.rcmd = static_cast<short>(SERVO::RCMD::Robot_home); |
| | | return robotCmd(cmd); |
| | | return robotCmd(cmd, onWritedBlock); |
| | | } |
| | | |
| | | int CEFEM::SendTransfer(int seq, int armNo, int fromPos, int toPos, int fromSlot, int toSlot) |
| | | int CEFEM::robotSendTransfer(int seq, int armNo, int fromPos, int toPos, int fromSlot, int toSlot, ONWRITED onWritedBlock/* = nullptr*/) |
| | | { |
| | | SERVO::ROBOT_CMD_PARAM cmd = {}; |
| | | cmd.sequenceNo = static_cast<short>(seq); |
| | |
| | | cmd.getSlotNo = static_cast<short>(fromSlot); |
| | | cmd.putPosition = static_cast<short>(toPos); |
| | | cmd.putSlotNo = static_cast<short>(toSlot); |
| | | return robotCmd(cmd); |
| | | return robotCmd(cmd, onWritedBlock); |
| | | } |
| | | |
| | | int CEFEM::SendMoveToGet(int seq, int armNo, int pos, int slot) |
| | | int CEFEM::robotSendMoveToGet(int seq, int armNo, int pos, int slot, ONWRITED onWritedBlock/* = nullptr*/) |
| | | { |
| | | SERVO::ROBOT_CMD_PARAM cmd = {}; |
| | | cmd.sequenceNo = static_cast<short>(seq); |
| | |
| | | cmd.getPosition = static_cast<short>(pos); |
| | | cmd.getSlotNo = static_cast<short>(slot); |
| | | cmd.subCmd = 1; |
| | | return robotCmd(cmd); |
| | | return robotCmd(cmd, onWritedBlock); |
| | | } |
| | | |
| | | int CEFEM::SendMoveToPut(int seq, int armNo, int pos, int slot) |
| | | int CEFEM::robotSendMoveToPut(int seq, int armNo, int pos, int slot, ONWRITED onWritedBlock/* = nullptr*/) |
| | | { |
| | | SERVO::ROBOT_CMD_PARAM cmd = {}; |
| | | cmd.sequenceNo = static_cast<short>(seq); |
| | |
| | | cmd.putPosition = static_cast<short>(pos); |
| | | cmd.putSlotNo = static_cast<short>(slot); |
| | | cmd.subCmd = 2; |
| | | return robotCmd(cmd); |
| | | return robotCmd(cmd, onWritedBlock); |
| | | } |
| | | |
| | | int CEFEM::SendGet(int seq, int armNo, int pos, int slot) |
| | | int CEFEM::robotSendGet(int seq, int armNo, int pos, int slot, ONWRITED onWritedBlock/* = nullptr*/) |
| | | { |
| | | SERVO::ROBOT_CMD_PARAM cmd = {}; |
| | | cmd.sequenceNo = static_cast<short>(seq); |
| | |
| | | cmd.armNo = static_cast<short>(armNo); |
| | | cmd.getPosition = static_cast<short>(pos); |
| | | cmd.getSlotNo = static_cast<short>(slot); |
| | | return robotCmd(cmd); |
| | | return robotCmd(cmd, onWritedBlock); |
| | | } |
| | | |
| | | int CEFEM::SendPut(int seq, int armNo, int pos, int slot) |
| | | int CEFEM::robotSendPut(int seq, int armNo, int pos, int slot, ONWRITED onWritedBlock/* = nullptr*/) |
| | | { |
| | | SERVO::ROBOT_CMD_PARAM cmd = {}; |
| | | cmd.sequenceNo = static_cast<short>(seq); |
| | |
| | | cmd.armNo = static_cast<short>(armNo); |
| | | cmd.putPosition = static_cast<short>(pos); |
| | | cmd.putSlotNo = static_cast<short>(slot); |
| | | return robotCmd(cmd); |
| | | return robotCmd(cmd, onWritedBlock); |
| | | } |
| | | |
| | | int CEFEM::SendExchange(int seq, int armNo, int pos, int getSlot, int putSlot) |
| | | int CEFEM::robotSendExchange(int seq, int armNo, int pos, int getSlot, int putSlot, ONWRITED onWritedBlock/* = nullptr*/) |
| | | { |
| | | SERVO::ROBOT_CMD_PARAM cmd = {}; |
| | | cmd.sequenceNo = static_cast<short>(seq); |
| | |
| | | cmd.putPosition = static_cast<short>(pos); |
| | | cmd.getSlotNo = static_cast<short>(getSlot); |
| | | cmd.putSlotNo = static_cast<short>(putSlot); |
| | | return robotCmd(cmd); |
| | | return robotCmd(cmd, onWritedBlock); |
| | | } |
| | | |
| | | int CEFEM::SendCommandClear(int seq) |
| | | int CEFEM::robotSendCommandClear(int seq, ONWRITED onWritedBlock/* = nullptr*/) |
| | | { |
| | | SERVO::ROBOT_CMD_PARAM cmd = {}; |
| | | cmd.sequenceNo = static_cast<short>(seq); |
| | | cmd.rcmd = static_cast<short>(SERVO::RCMD::Command_Clear); |
| | | return robotCmd(cmd); |
| | | return robotCmd(cmd, onWritedBlock); |
| | | } |
| | | |
| | | int CEFEM::SendBatchGet(int seq, int getPos, int getSlot) |
| | | int CEFEM::robotSendBatchGet(int seq, int getPos, int getSlot, ONWRITED onWritedBlock/* = nullptr*/) |
| | | { |
| | | SERVO::ROBOT_CMD_PARAM cmd = {}; |
| | | cmd.sequenceNo = static_cast<short>(seq); |
| | |
| | | cmd.armNo = ARM_ALL; |
| | | cmd.getPosition = static_cast<short>(getPos); |
| | | cmd.getSlotNo = static_cast<short>(getSlot); |
| | | return robotCmd(cmd); |
| | | return robotCmd(cmd, onWritedBlock); |
| | | } |
| | | |
| | | int CEFEM::SendBatchPut(int seq, int putPos, int putSlot) |
| | | int CEFEM::robotSendBatchPut(int seq, int putPos, int putSlot, ONWRITED onWritedBlock/* = nullptr*/) |
| | | { |
| | | SERVO::ROBOT_CMD_PARAM cmd = {}; |
| | | cmd.sequenceNo = static_cast<short>(seq); |
| | |
| | | cmd.armNo = ARM_ALL; |
| | | cmd.putPosition = static_cast<short>(putPos); |
| | | cmd.putSlotNo = static_cast<short>(putSlot); |
| | | return robotCmd(cmd); |
| | | return robotCmd(cmd, onWritedBlock); |
| | | } |
| | | |
| | | int CEFEM::SendMoveToGetAndHome(int seq, int armNo, int getPos, int getSlot) |
| | | int CEFEM::robotSendMoveToGetAndHome(int seq, int armNo, int getPos, int getSlot, ONWRITED onWritedBlock/* = nullptr*/) |
| | | { |
| | | SERVO::ROBOT_CMD_PARAM cmds[2] = {}; |
| | | |
| | |
| | | cmds[1].sequenceNo = static_cast<short>(seq + 1); |
| | | cmds[1].rcmd = static_cast<short>(SERVO::RCMD::Robot_home); |
| | | |
| | | return robotCmds(cmds, 2); |
| | | return robotCmds(cmds, 2, onWritedBlock); |
| | | } |
| | | |
| | | int CEFEM::SendMoveToPutAndHome(int seq, int armNo, int putPos, int putSlot) |
| | | int CEFEM::robotSendMoveToPutAndHome(int seq, int armNo, int putPos, int putSlot, ONWRITED onWritedBlock/* = nullptr*/) |
| | | { |
| | | SERVO::ROBOT_CMD_PARAM cmds[2] = {}; |
| | | |
| | |
| | | cmds[1].sequenceNo = static_cast<short>(seq + 1); |
| | | cmds[1].rcmd = static_cast<short>(SERVO::RCMD::Robot_home); |
| | | |
| | | return robotCmds(cmds, 2); |
| | | return robotCmds(cmds, 2, onWritedBlock); |
| | | } |
| | | |
| | | int CEFEM::SendTransferAndHome(int seq, int armNo, int fromPos, int toPos, int fromSlot, int toSlot) |
| | | int CEFEM::robotSendTransferAndHome(int seq, int armNo, int fromPos, int toPos, int fromSlot, int toSlot, ONWRITED onWritedBlock/* = nullptr*/) |
| | | { |
| | | SERVO::ROBOT_CMD_PARAM cmds[2] = {}; |
| | | |
| | |
| | | cmds[1].sequenceNo = static_cast<short>(seq + 1); |
| | | cmds[1].rcmd = static_cast<short>(SERVO::RCMD::Robot_home); |
| | | |
| | | return robotCmds(cmds, 2); |
| | | return robotCmds(cmds, 2, onWritedBlock); |
| | | } |
| | | |
| | | int CEFEM::SendGetAndPut(int seq, int armNo, int getPos, int getSlot, int putPos, int putSlot) |
| | | int CEFEM::robotSendGetAndPut(int seq, int armNo, int getPos, int getSlot, int putPos, int putSlot, ONWRITED onWritedBlock/* = nullptr*/) |
| | | { |
| | | SERVO::ROBOT_CMD_PARAM cmds[2] = {}; |
| | | |
| | |
| | | cmds[1].putPosition = static_cast<short>(putPos); |
| | | cmds[1].putSlotNo = static_cast<short>(putSlot); |
| | | |
| | | return robotCmds(cmds, 2); |
| | | return robotCmds(cmds, 2, onWritedBlock); |
| | | } |
| | | |
| | | int CEFEM::SendPutAndHome(int seq, int armNo, int putPos, int putSlot) |
| | | int CEFEM::robotSendPutAndHome(int seq, int armNo, int putPos, int putSlot, ONWRITED onWritedBlock/* = nullptr*/) |
| | | { |
| | | SERVO::ROBOT_CMD_PARAM cmds[2] = {}; |
| | | |
| | |
| | | cmds[1].sequenceNo = static_cast<short>(seq + 1); |
| | | cmds[1].rcmd = static_cast<short>(SERVO::RCMD::Robot_home); |
| | | |
| | | return robotCmds(cmds, 2); |
| | | return robotCmds(cmds, 2, onWritedBlock); |
| | | } |
| | | |
| | | void CEFEM::init() |
| | |
| | | int robotCmds(ROBOT_CMD_PARAM* robotCmdParam, unsigned int count, ONWRITED onWritedBlock = nullptr); |
| | | |
| | | // å¿«æ·å°è£
|
| | | int SendHome(int seq); |
| | | int SendTransfer(int seq, int armNo, int fromPos, int toPos, int fromSlot, int toSlot); |
| | | int SendMoveToGet(int seq, int armNo, int pos, int slot); |
| | | int SendMoveToPut(int seq, int armNo, int pos, int slot); |
| | | int SendGet(int seq, int armNo, int pos, int slot); |
| | | int SendPut(int seq, int armNo, int pos, int slot); |
| | | int SendExchange(int seq, int armNo, int pos, int getSlot, int putSlot); |
| | | int SendCommandClear(int seq); |
| | | int SendBatchGet(int seq, int getPos, int getSlot); |
| | | int SendBatchPut(int seq, int putPos, int putSlot); |
| | | int SendMoveToGetAndHome(int seq, int armNo, int getPos, int getSlot); |
| | | int SendMoveToPutAndHome(int seq, int armNo, int putPos, int putSlot); |
| | | int SendTransferAndHome(int seq, int armNo, int fromPos, int toPos, int fromSlot, int toSlot); |
| | | int SendGetAndPut(int seq, int armNo, int getPos, int getSlot, int putPos, int putSlot); |
| | | int SendPutAndHome(int seq, int armNo, int putPos, int putSlot); |
| | | int robotSendHome(int seq, ONWRITED onWritedBlock = nullptr); |
| | | int robotSendTransfer(int seq, int armNo, int fromPos, int toPos, int fromSlot, int toSlot, ONWRITED onWritedBlock = nullptr); |
| | | int robotSendMoveToGet(int seq, int armNo, int pos, int slot, ONWRITED onWritedBlock = nullptr); |
| | | int robotSendMoveToPut(int seq, int armNo, int pos, int slot, ONWRITED onWritedBlock = nullptr); |
| | | int robotSendGet(int seq, int armNo, int pos, int slot, ONWRITED onWritedBlock = nullptr); |
| | | int robotSendPut(int seq, int armNo, int pos, int slot, ONWRITED onWritedBlock = nullptr); |
| | | int robotSendExchange(int seq, int armNo, int pos, int getSlot, int putSlot, ONWRITED onWritedBlock = nullptr); |
| | | int robotSendCommandClear(int seq, ONWRITED onWritedBlock = nullptr); |
| | | int robotSendBatchGet(int seq, int getPos, int getSlot, ONWRITED onWritedBlock = nullptr); |
| | | int robotSendBatchPut(int seq, int putPos, int putSlot, ONWRITED onWritedBlock = nullptr); |
| | | int robotSendMoveToGetAndHome(int seq, int armNo, int getPos, int getSlot, ONWRITED onWritedBlock = nullptr); |
| | | int robotSendMoveToPutAndHome(int seq, int armNo, int putPos, int putSlot, ONWRITED onWritedBlock = nullptr); |
| | | int robotSendTransferAndHome(int seq, int armNo, int fromPos, int toPos, int fromSlot, int toSlot, ONWRITED onWritedBlock = nullptr); |
| | | int robotSendGetAndPut(int seq, int armNo, int getPos, int getSlot, int putPos, int putSlot, ONWRITED onWritedBlock = nullptr); |
| | | int robotSendPutAndHome(int seq, int armNo, int putPos, int putSlot, ONWRITED onWritedBlock = nullptr); |
| | | |
| | | private: |
| | | CLoadPort* m_pPort[4]; |
| | |
| | | return 0; |
| | | } |
| | | |
| | | int CMaster::start() |
| | | { |
| | | AfxMessageBox("start"); |
| | | return 0; |
| | | } |
| | | |
| | | int CMaster::stop() |
| | | { |
| | | AfxMessageBox("stop"); |
| | | return 0; |
| | | } |
| | | |
| | | unsigned CMaster::ReadBitsProc() |
| | | { |
| | | while (1) { |
| | |
| | | void setListener(MasterListener listener); |
| | | int init(); |
| | | int term(); |
| | | int start(); |
| | | int stop(); |
| | | unsigned ReadBitsProc(); |
| | | void onTimer(UINT nTimerid); |
| | | std::list<CEquipment*>& getEquipmentList(); |
| | |
| | | #include "CPagePortStatus.h" |
| | | #include "CPageCassetteCtrlCmd.h" |
| | | #include "CJobDataB.h" |
| | | #include "CRobotCmdContainerDlg.h" |
| | | #include "CRobotCmdTestDlg.h" |
| | | |
| | | |
| | | // CPageGraph2 å¯¹è¯æ¡ |
| | |
| | | } |
| | | else if (nCmd == ID_EQSGRAPHITEM_TEST4) { |
| | | SERVO::CEquipment* pEquipment = (SERVO::CEquipment*)pItem->pData; |
| | | |
| | | /* æµè¯ RobotCMD */ |
| | | if (pEquipment->getID() == EQ_ID_EFEM) { |
| | | SERVO::CEFEM* pEFEM = (SERVO::CEFEM*)pEquipment; |
| | | |
| | | //SERVO::ROBOT_CMD_PARAM cmds[4]; |
| | | //cmds[0].sequenceNo = 1; |
| | | //cmds[0].rcmd = (short)SERVO::RCMD::Move; |
| | | //cmds[0].armNo = 1; |
| | | //cmds[0].getPosition = 1; |
| | | //cmds[0].putPosition = 2; |
| | | //cmds[0].getSlotNo = 3; |
| | | //cmds[0].putSlotNo = 4; |
| | | //cmds[0].subCmd = 5; |
| | | //cmds[1].sequenceNo = 2; |
| | | //cmds[1].rcmd = (short)SERVO::RCMD::Transfer; |
| | | //cmds[1].armNo = 2; |
| | | //cmds[1].getPosition = 6; |
| | | //cmds[1].putPosition = 7; |
| | | //cmds[1].getSlotNo = 8; |
| | | //cmds[1].putSlotNo = 9; |
| | | //cmds[1].subCmd = 10; |
| | | //pEFEM->robotCmds(cmds, 2); |
| | | |
| | | //CRobotCmdContainerDlg dlg; |
| | | //if (dlg.DoModal() == IDOK) { |
| | | // std::vector<SERVO::ROBOT_CMD_PARAM>& cmds = dlg.GetResultCmds(); |
| | | // if (!cmds.empty()) { |
| | | // pEFEM->robotCmds(cmds.data(), (int)cmds.size()); |
| | | // } |
| | | //} |
| | | |
| | | CRobotCmdTestDlg dlg; |
| | | dlg.SetEFEM(pEFEM); |
| | | dlg.DoModal(); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | // æµè¯ä¸åCim Message |
| | |
| | | |
| | | // å¿«æ·å½ä»¤æ§è¡æ å°è¡¨ |
| | | m_mapCmdExec = { |
| | | {_T("SendHome"), [this](int seq, int, int, int, int, int) { |
| | | return m_pEFEM->SendHome(seq); |
| | | {_T("SendHome"), [this](int seq, int, int, int, int, int, SERVO::ONWRITED onWritedBlock) { |
| | | return m_pEFEM->robotSendHome(seq, onWritedBlock); |
| | | }}, |
| | | |
| | | {_T("SendTransfer"), [this](int seq, int armNo, int getPos, int putPos, int getSlot, int putSlot) { |
| | | return m_pEFEM->SendTransfer(seq, armNo, getPos, putPos, getSlot, putSlot); |
| | | {_T("SendTransfer"), [this](int seq, int armNo, int getPos, int putPos, int getSlot, int putSlot, SERVO::ONWRITED onWritedBlock) { |
| | | return m_pEFEM->robotSendTransfer(seq, armNo, getPos, putPos, getSlot, putSlot, onWritedBlock); |
| | | }}, |
| | | |
| | | {_T("SendMoveToGet"), [this](int seq, int armNo, int pos, int, int slot, int) { |
| | | return m_pEFEM->SendMoveToGet(seq, armNo, pos, slot); |
| | | {_T("SendMoveToGet"), [this](int seq, int armNo, int pos, int, int slot, int, SERVO::ONWRITED onWritedBlock) { |
| | | return m_pEFEM->robotSendMoveToGet(seq, armNo, pos, slot, onWritedBlock); |
| | | }}, |
| | | |
| | | {_T("SendMoveToPut"), [this](int seq, int armNo, int, int pos, int, int slot) { |
| | | return m_pEFEM->SendMoveToPut(seq, armNo, pos, slot); |
| | | {_T("SendMoveToPut"), [this](int seq, int armNo, int, int pos, int, int slot, SERVO::ONWRITED onWritedBlock) { |
| | | return m_pEFEM->robotSendMoveToPut(seq, armNo, pos, slot, onWritedBlock); |
| | | }}, |
| | | |
| | | {_T("SendGet"), [this](int seq, int armNo, int pos, int, int slot, int) { |
| | | return m_pEFEM->SendGet(seq, armNo, pos, slot); |
| | | {_T("SendGet"), [this](int seq, int armNo, int pos, int, int slot, int, SERVO::ONWRITED onWritedBlock) { |
| | | return m_pEFEM->robotSendGet(seq, armNo, pos, slot, onWritedBlock); |
| | | }}, |
| | | |
| | | {_T("SendPut"), [this](int seq, int armNo, int, int pos, int, int slot) { |
| | | return m_pEFEM->SendPut(seq, armNo, pos, slot); |
| | | {_T("SendPut"), [this](int seq, int armNo, int, int pos, int, int slot, SERVO::ONWRITED onWritedBlock) { |
| | | return m_pEFEM->robotSendPut(seq, armNo, pos, slot, onWritedBlock); |
| | | }}, |
| | | |
| | | {_T("SendExchange"), [this](int seq, int armNo, int pos, int, int getSlot, int putSlot) { |
| | | return m_pEFEM->SendExchange(seq, armNo, pos, getSlot, putSlot); |
| | | {_T("SendExchange"), [this](int seq, int armNo, int pos, int, int getSlot, int putSlot, SERVO::ONWRITED onWritedBlock) { |
| | | return m_pEFEM->robotSendExchange(seq, armNo, pos, getSlot, putSlot, onWritedBlock); |
| | | }}, |
| | | |
| | | {_T("SendCommandClear"), [this](int seq, int, int, int, int, int) { |
| | | return m_pEFEM->SendCommandClear(seq); |
| | | {_T("SendCommandClear"), [this](int seq, int, int, int, int, int, SERVO::ONWRITED onWritedBlock) { |
| | | return m_pEFEM->robotSendCommandClear(seq, onWritedBlock); |
| | | }}, |
| | | |
| | | {_T("SendBatchGet"), [this](int seq, int armNo, int pos, int, int slot, int) { |
| | | return m_pEFEM->SendBatchGet(seq, pos, slot); |
| | | {_T("SendBatchGet"), [this](int seq, int armNo, int pos, int, int slot, int, SERVO::ONWRITED onWritedBlock) { |
| | | return m_pEFEM->robotSendBatchGet(seq, pos, slot, onWritedBlock); |
| | | }}, |
| | | |
| | | {_T("SendBatchPut"), [this](int seq, int armNo, int, int pos, int, int slot) { |
| | | return m_pEFEM->SendBatchPut(seq, pos, slot); |
| | | {_T("SendBatchPut"), [this](int seq, int armNo, int, int pos, int, int slot, SERVO::ONWRITED onWritedBlock) { |
| | | return m_pEFEM->robotSendBatchPut(seq, pos, slot, onWritedBlock); |
| | | }}, |
| | | |
| | | {_T("SendMoveToGetAndHome"), [this](int seq, int armNo, int pos, int, int slot, int) { |
| | | return m_pEFEM->SendMoveToGetAndHome(seq, armNo, pos, slot); |
| | | {_T("SendMoveToGetAndHome"), [this](int seq, int armNo, int pos, int, int slot, int, SERVO::ONWRITED onWritedBlock) { |
| | | return m_pEFEM->robotSendMoveToGetAndHome(seq, armNo, pos, slot, onWritedBlock); |
| | | }}, |
| | | |
| | | {_T("SendMoveToPutAndHome"), [this](int seq, int armNo, int, int pos, int, int slot) { |
| | | return m_pEFEM->SendMoveToPutAndHome(seq, armNo, pos, slot); |
| | | {_T("SendMoveToPutAndHome"), [this](int seq, int armNo, int, int pos, int, int slot, SERVO::ONWRITED onWritedBlock) { |
| | | return m_pEFEM->robotSendMoveToPutAndHome(seq, armNo, pos, slot, onWritedBlock); |
| | | }}, |
| | | |
| | | {_T("SendTransferAndHome"), [this](int seq, int armNo, int getPos, int putPos, int getSlot, int putSlot) { |
| | | return m_pEFEM->SendTransferAndHome(seq, armNo, getPos, putPos, getSlot, putSlot); |
| | | {_T("SendTransferAndHome"), [this](int seq, int armNo, int getPos, int putPos, int getSlot, int putSlot, SERVO::ONWRITED onWritedBlock) { |
| | | return m_pEFEM->robotSendTransferAndHome(seq, armNo, getPos, putPos, getSlot, putSlot, onWritedBlock); |
| | | }}, |
| | | |
| | | {_T("SendGetAndPut"), [this](int seq, int armNo, int getPos, int putPos, int getSlot, int putSlot) { |
| | | return m_pEFEM->SendGetAndPut(seq, armNo, getPos, putPos, getSlot, putSlot); |
| | | {_T("SendGetAndPut"), [this](int seq, int armNo, int getPos, int putPos, int getSlot, int putSlot, SERVO::ONWRITED onWritedBlock) { |
| | | return m_pEFEM->robotSendGetAndPut(seq, armNo, getPos, putPos, getSlot, putSlot, onWritedBlock); |
| | | }}, |
| | | |
| | | {_T("SendPutAndHome"), [this](int seq, int armNo, int, int pos, int, int slot) { |
| | | return m_pEFEM->SendPutAndHome(seq, armNo, pos, slot); |
| | | {_T("SendPutAndHome"), [this](int seq, int armNo, int, int pos, int, int slot, SERVO::ONWRITED onWritedBlock) { |
| | | return m_pEFEM->robotSendPutAndHome(seq, armNo, pos, slot, onWritedBlock); |
| | | }} |
| | | }; |
| | | |
| | |
| | | // æ¥æ¾å½æ°å¹¶æ§è¡ |
| | | auto it = m_mapCmdExec.find(cmdName); |
| | | if (it != m_mapCmdExec.end() && nullptr != m_pEFEM) { |
| | | int ret = it->second(1, armNo, getPos, getSlot, putPos, putSlot); |
| | | int ret = it->second(1, armNo, getPos, getSlot, putPos, putSlot, [&](int code) -> int { |
| | | if (code == WOK) { |
| | | AppendLogLineRichStyled(_T("å·²æ¶å°Robotååºï¼"), LOG_COLOR_SUCCESS); |
| | | } |
| | | else { |
| | | AppendLogLineRichStyled(_T("æªæ¶å°Robotååºï¼"), LOG_COLOR_ERROR); |
| | | } |
| | | |
| | | return 0; |
| | | }); |
| | | |
| | | CString log; |
| | | if (ret == 0) { |
| | |
| | | #include <afxrich.h> |
| | | |
| | | // å®ä¹å½ä»¤å½æ°æéç±»åï¼seq, armNo, getPos, getSlot, putPos, putSlotï¼ |
| | | using CmdFunc = std::function<int(int, int, int, int, int, int)>; |
| | | using CmdFunc = std::function<int(int, int, int, int, int, int, SERVO::ONWRITED onWritedBlock)>; |
| | | |
| | | // è¾å
¥æ§ä»¶ç¶æ |
| | | struct QuickCmdFieldMask { |
| | |
| | | #define CR_MSGBOX_BKGND RGB(7, 71, 166) |
| | | #define CR_MSGBOX_TITLE RGB(200, 216, 246) |
| | | #define CR_MSGBOX_MESSAGE RGB(200, 216, 246) |
| | | |
| | | #define TOP_TOOLBAR_BACKGROUND RGB(240, 240, 240) |
| | | |
| | | /* LOG BTN */ |
| | | #define BTN_LOG_FRAME_NORMAL RGB(88, 88, 88) |
| | |
| | | return m_pObservable; |
| | | } |
| | | |
| | | SERVO::CMaster& CModel::getMaster() |
| | | { |
| | | return m_master; |
| | | } |
| | | |
| | | void CModel::setWorkDir(const char* pszWorkDir) |
| | | { |
| | | m_strWorkDir = pszWorkDir; |
| | |
| | | |
| | | public: |
| | | IObservable* getObservable(); |
| | | SERVO::CMaster& getMaster(); |
| | | void setWorkDir(const char* pszWorkDir); |
| | | int init(); |
| | | int term(); |
| | |
| | | #include "SECSRuntimeManager.h" |
| | | #include "ProductionLogManager.h" |
| | | #include "VerticalLine.h" |
| | | #include "HorizontalLine.h" |
| | | #include "EqsGraphWnd.h" |
| | | #include "MapPosWnd.h" |
| | | #include "HmTab.h" |
| | |
| | | // æ³¨åæ§ä»¶ |
| | | CServoGraph::RegisterWndClass(); |
| | | CVerticalLine::RegisterWndClass(); |
| | | CHorizontalLine::RegisterWndClass(); |
| | | CEqsGraphWnd::RegisterWndClass(); |
| | | CMapPosWnd::RegisterWndClass(); |
| | | CHmTab::RegisterWndClass(); |
| | |
| | | <ClInclude Include="CRobotCmdTestDlg.h" /> |
| | | <ClInclude Include="CPagePortStatus.h" /> |
| | | <ClInclude Include="CPortStatusReport.h" /> |
| | | <ClInclude Include="HorizontalLine.h" /> |
| | | <ClInclude Include="JobSlotGrid.h" /> |
| | | <ClInclude Include="MsgDlg.h" /> |
| | | <ClInclude Include="PageRecipe.h" /> |
| | |
| | | <ClInclude Include="targetver.h" /> |
| | | <ClInclude Include="TerminalDisplayDlg.h" /> |
| | | <ClInclude Include="ToolUnits.h" /> |
| | | <ClInclude Include="TopToolbar.h" /> |
| | | <ClInclude Include="VerticalLine.h" /> |
| | | </ItemGroup> |
| | | <ItemGroup> |
| | |
| | | <ClCompile Include="CRobotCmdTestDlg.cpp" /> |
| | | <ClCompile Include="CPagePortStatus.cpp" /> |
| | | <ClCompile Include="CPortStatusReport.cpp" /> |
| | | <ClCompile Include="HorizontalLine.cpp" /> |
| | | <ClCompile Include="JobSlotGrid.cpp" /> |
| | | <ClCompile Include="MsgDlg.cpp" /> |
| | | <ClCompile Include="PageRecipe.cpp" /> |
| | |
| | | </ClCompile> |
| | | <ClCompile Include="TerminalDisplayDlg.cpp" /> |
| | | <ClCompile Include="ToolUnits.cpp" /> |
| | | <ClCompile Include="TopToolbar.cpp" /> |
| | | <ClCompile Include="VerticalLine.cpp" /> |
| | | </ItemGroup> |
| | | <ItemGroup> |
| | |
| | | <ClCompile Include="MsgDlg.cpp" /> |
| | | <ClCompile Include="CPagePortStatus.cpp" /> |
| | | <ClCompile Include="JobSlotGrid.cpp" /> |
| | | <ClCompile Include="TopToolbar.cpp" /> |
| | | <ClCompile Include="HorizontalLine.cpp" /> |
| | | </ItemGroup> |
| | | <ItemGroup> |
| | | <ClInclude Include="AlarmManager.h" /> |
| | |
| | | <ClInclude Include="CPagePortStatus.h" /> |
| | | <ClInclude Include="ServoCommo.h" /> |
| | | <ClInclude Include="JobSlotGrid.h" /> |
| | | <ClInclude Include="TopToolbar.h" /> |
| | | <ClInclude Include="HorizontalLine.h" /> |
| | | </ItemGroup> |
| | | <ItemGroup> |
| | | <ResourceCompile Include="Servo.rc" /> |
| | |
| | | #include <thread> |
| | | #include <cmath> |
| | | #include "HmTab.h" |
| | | #include "CRobotCmdContainerDlg.h" |
| | | #include "CRobotCmdTestDlg.h" |
| | | |
| | | |
| | | #ifdef _DEBUG |
| | |
| | | m_pPageAlarm = nullptr; |
| | | m_pPageLog = nullptr; |
| | | m_pPageRecipe = nullptr; |
| | | m_pTopToolbar = nullptr; |
| | | } |
| | | |
| | | void CServoDlg::DoDataExchange(CDataExchange* pDX) |
| | |
| | | ON_WM_TIMER() |
| | | ON_MESSAGE(ID_MSG_PANEL_RESIZE, OnPanelResize) |
| | | ON_NOTIFY(BYHMTAB_SEL_CHANGED, IDC_TAB1, &CServoDlg::OnTabSelChanged) |
| | | ON_MESSAGE(ID_MSG_TOOLBAR_BTN_CLICKED, &CServoDlg::OnToolbarBtnClicked) |
| | | END_MESSAGE_MAP() |
| | | |
| | | |
| | |
| | | CMenu menu; |
| | | menu.LoadMenu(IDR_MENU_APP); |
| | | SetMenu(&menu); |
| | | |
| | | |
| | | // toolbar |
| | | m_pTopToolbar = new CTopToolbar(); |
| | | m_pTopToolbar->Create(IDD_TOP_TOOLBAR, this); |
| | | m_pTopToolbar->ShowWindow(SW_SHOW); |
| | | m_pTopToolbar->GetBtn(IDC_BUTTON_STOP)->EnableWindow(FALSE); |
| | | m_pTopToolbar->GetBtn(IDC_BUTTON_ALARM)->EnableWindow(FALSE); |
| | | HMENU hMenu = m_pTopToolbar->GetOperatorMenu(); |
| | | ASSERT(hMenu); |
| | | ::EnableMenuItem(hMenu, ID_OPEATOR_SWITCH, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); |
| | | |
| | | |
| | | // Tab |
| | |
| | | CDialogEx::OnDestroy(); |
| | | |
| | | |
| | | if (m_pTopToolbar != nullptr) { |
| | | m_pTopToolbar->DestroyWindow(); |
| | | delete m_pTopToolbar; |
| | | m_pTopToolbar = nullptr; |
| | | } |
| | | |
| | | if (m_pTerminalDisplayDlg != nullptr) { |
| | | m_pTerminalDisplayDlg->DestroyWindow(); |
| | | delete m_pTerminalDisplayDlg; |
| | |
| | | Invalidate(); |
| | | } |
| | | |
| | | #define TOOLBAR_HEIGHT 78 |
| | | void CServoDlg::Resize() |
| | | { |
| | | CRect rcClient, rcItem; |
| | |
| | | |
| | | x = 0; |
| | | y = 0; |
| | | m_pTopToolbar->MoveWindow(0, 0, rcClient.Width(), TOOLBAR_HEIGHT); |
| | | y += TOOLBAR_HEIGHT; |
| | | |
| | | int nPanelWidth = 0; |
| | | if (m_pPanelMaster != nullptr) { |
| | | nPanelWidth = m_pPanelMaster->getPanelWidth(); |
| | |
| | | pPages[i]->ShowWindow(i == index ? SW_SHOW : SW_HIDE); |
| | | } |
| | | } |
| | | |
| | | LRESULT CServoDlg::OnToolbarBtnClicked(WPARAM wParam, LPARAM lParam) |
| | | { |
| | | int id = (int)lParam; |
| | | if (id == IDC_BUTTON_RUN) { |
| | | theApp.m_model.getMaster().start(); |
| | | m_pTopToolbar->GetBtn(IDC_BUTTON_RUN)->EnableWindow(FALSE); |
| | | m_pTopToolbar->GetBtn(IDC_BUTTON_STOP)->EnableWindow(TRUE); |
| | | |
| | | } |
| | | else if (id == IDC_BUTTON_STOP) { |
| | | theApp.m_model.getMaster().stop(); |
| | | m_pTopToolbar->GetBtn(IDC_BUTTON_RUN)->EnableWindow(TRUE); |
| | | m_pTopToolbar->GetBtn(IDC_BUTTON_STOP)->EnableWindow(FALSE); |
| | | } |
| | | else if (id == IDC_BUTTON_ROBOT) { |
| | | SERVO::CEFEM* pEFEM = (SERVO::CEFEM*)theApp.m_model.getMaster().getEquipment(EQ_ID_EFEM); |
| | | CRobotCmdTestDlg dlg; |
| | | dlg.SetEFEM(pEFEM); |
| | | dlg.DoModal(); |
| | | } |
| | | return 0; |
| | | } |
| | |
| | | #include "CPanelAttributes.h" |
| | | #include "CPageGraph1.h" |
| | | #include "CPageGraph2.h" |
| | | #include "TopToolbar.h" |
| | | |
| | | |
| | | // CServoDlg å¯¹è¯æ¡ |
| | |
| | | HICON m_hIcon; |
| | | COLORREF m_crBkgnd; |
| | | HBRUSH m_hbrBkgnd; |
| | | CTopToolbar* m_pTopToolbar; |
| | | CPanelMaster* m_pPanelMaster; |
| | | CPanelEquipment* m_pPanelEquipment; |
| | | CPanelAttributes* m_pPanelAttributes; |
| | |
| | | afx_msg void OnTimer(UINT_PTR nIDEvent); |
| | | afx_msg LRESULT OnPanelResize(WPARAM wParam, LPARAM lParam); |
| | | afx_msg void OnTabSelChanged(NMHDR* nmhdr, LRESULT* result); |
| | | LRESULT OnToolbarBtnClicked(WPARAM wParam, LPARAM lParam); |
| | | }; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | // TopToolbar.cpp : å®ç°æä»¶ |
| | | // |
| | | |
| | | #include "stdafx.h" |
| | | #include "Servo.h" |
| | | #include "TopToolbar.h" |
| | | #include "afxdialogex.h" |
| | | #include "Common.h" |
| | | |
| | | |
| | | // CTopToolbar å¯¹è¯æ¡ |
| | | |
| | | IMPLEMENT_DYNAMIC(CTopToolbar, CDialogEx) |
| | | |
| | | CTopToolbar::CTopToolbar(CWnd* pParent /*=NULL*/) |
| | | : CDialogEx(IDD_TOP_TOOLBAR, pParent) |
| | | { |
| | | m_crBkgnd = TOP_TOOLBAR_BACKGROUND; |
| | | m_hbrBkgnd = nullptr; |
| | | } |
| | | |
| | | CTopToolbar::~CTopToolbar() |
| | | { |
| | | } |
| | | |
| | | void CTopToolbar::DoDataExchange(CDataExchange* pDX) |
| | | { |
| | | CDialogEx::DoDataExchange(pDX); |
| | | DDX_Control(pDX, IDC_BUTTON_RUN, m_btnRun); |
| | | DDX_Control(pDX, IDC_BUTTON_STOP, m_btnStop); |
| | | DDX_Control(pDX, IDC_BUTTON_ALARM, m_btnAlarm); |
| | | DDX_Control(pDX, IDC_BUTTON_SETTINGS, m_btnSettings); |
| | | DDX_Control(pDX, IDC_BUTTON_ROBOT, m_btnRobot); |
| | | DDX_Control(pDX, IDC_BUTTON_OPERATOR, m_btnOperator); |
| | | } |
| | | |
| | | |
| | | BEGIN_MESSAGE_MAP(CTopToolbar, CDialogEx) |
| | | ON_WM_CTLCOLOR() |
| | | ON_WM_DESTROY() |
| | | ON_WM_SIZE() |
| | | ON_NOTIFY(BLBUTTON_MENU_ITEM_CLICKED, IDC_BUTTON_OPERATOR, &CTopToolbar::OnButtonOperatorMenuClicked) |
| | | END_MESSAGE_MAP() |
| | | |
| | | |
| | | // CTopToolbar æ¶æ¯å¤çç¨åº |
| | | |
| | | |
| | | BOOL CTopToolbar::OnInitDialog() |
| | | { |
| | | CDialogEx::OnInitDialog(); |
| | | |
| | | InitBtn(m_btnRun, "Run_High_32.ico", "Run_Gray_32.ico"); |
| | | InitBtn(m_btnStop, "Stop_High_32.ico", "Stop_Gray_32.ico"); |
| | | InitBtn(m_btnAlarm, "Alarm_o_32.ico", "Alarm_gray_32.ico"); |
| | | InitBtn(m_btnSettings, "Settings_High_32.ico", "Settings_Gray_32.ico"); |
| | | InitBtn(m_btnRobot, "Robot_High_32.ico", "Robot_Gray_32.ico"); |
| | | InitBtn(m_btnOperator, "Operator_High_32.ico", "Operator_Gray_32.ico"); |
| | | HMENU hMenu = LoadMenu(AfxGetInstanceHandle(), MAKEINTRESOURCEA(IDR_MENU_OPEATOR)); |
| | | m_btnOperator.SetMenu(hMenu); |
| | | |
| | | |
| | | return TRUE; // return TRUE unless you set the focus to a control |
| | | // å¼å¸¸: OCX 屿§é¡µåºè¿å FALSE |
| | | } |
| | | |
| | | |
| | | HBRUSH CTopToolbar::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) |
| | | { |
| | | HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor); |
| | | |
| | | if (nCtlColor == CTLCOLOR_STATIC) { |
| | | pDC->SetBkColor(m_crBkgnd); |
| | | } |
| | | |
| | | if (m_hbrBkgnd == nullptr) { |
| | | m_hbrBkgnd = CreateSolidBrush(m_crBkgnd); |
| | | } |
| | | |
| | | return m_hbrBkgnd; |
| | | } |
| | | |
| | | |
| | | void CTopToolbar::OnDestroy() |
| | | { |
| | | CDialogEx::OnDestroy(); |
| | | |
| | | if (m_hbrBkgnd != nullptr) { |
| | | ::DeleteObject(m_hbrBkgnd); |
| | | m_hbrBkgnd = nullptr; |
| | | } |
| | | } |
| | | |
| | | |
| | | void CTopToolbar::OnSize(UINT nType, int cx, int cy) |
| | | { |
| | | CDialogEx::OnSize(nType, cx, cy); |
| | | if (GetDlgItem(IDC_BUTTON_RUN) == nullptr) return; |
| | | Resize(); |
| | | } |
| | | |
| | | #define BTN_WIDTH 60 |
| | | #define BTN_HEIGHT 30 |
| | | void CTopToolbar::Resize() |
| | | { |
| | | CWnd* pItem; |
| | | CRect rcClient, rcItem; |
| | | GetClientRect(&rcClient); |
| | | int nBthHeight = (rcClient.Height() - 10); |
| | | int x = 2, y = 3; |
| | | |
| | | pItem = GetDlgItem(IDC_BUTTON_RUN); |
| | | pItem->MoveWindow(x, y, BTN_WIDTH, nBthHeight); |
| | | x += BTN_WIDTH; |
| | | x += 2; |
| | | |
| | | pItem = GetDlgItem(IDC_BUTTON_STOP); |
| | | pItem->MoveWindow(x, y, BTN_WIDTH, nBthHeight); |
| | | x += BTN_WIDTH; |
| | | x += 2; |
| | | |
| | | pItem = GetDlgItem(IDC_BUTTON_ALARM); |
| | | pItem->MoveWindow(x, y, BTN_WIDTH, nBthHeight); |
| | | x += BTN_WIDTH; |
| | | x += 2; |
| | | |
| | | pItem = GetDlgItem(IDC_TOOLBAR_LINE1); |
| | | pItem->MoveWindow(x, y + 6, 2, nBthHeight - 12); |
| | | x += 4; |
| | | |
| | | pItem = GetDlgItem(IDC_BUTTON_SETTINGS); |
| | | pItem->MoveWindow(x, y, BTN_WIDTH, nBthHeight); |
| | | x += BTN_WIDTH; |
| | | x += 2; |
| | | |
| | | pItem = GetDlgItem(IDC_BUTTON_ROBOT); |
| | | pItem->MoveWindow(x, y, BTN_WIDTH, nBthHeight); |
| | | x += BTN_WIDTH; |
| | | x += 2; |
| | | |
| | | x = rcClient.right - 5 - BTN_WIDTH - 20; |
| | | pItem = GetDlgItem(IDC_BUTTON_OPERATOR); |
| | | pItem->MoveWindow(x, y, BTN_WIDTH + 20, nBthHeight); |
| | | |
| | | |
| | | CWnd* pLine = GetDlgItem(IDC_LINE1); |
| | | pLine->MoveWindow(0, rcClient.bottom - 2, rcClient.Width(), 2); |
| | | } |
| | | |
| | | void CTopToolbar::InitBtn(CBlButton& btn, const char* pszIcon1, const char* pszIcon2) |
| | | { |
| | | CString strIcon1, strIcon2; |
| | | HICON hIcon1, hIcon2; |
| | | strIcon1.Format(_T("%s\\Res\\%s"), theApp.m_strAppDir, pszIcon1); |
| | | strIcon2.Format(_T("%s\\Res\\%s"), theApp.m_strAppDir, pszIcon2); |
| | | hIcon1 = (HICON)::LoadImage(AfxGetInstanceHandle(), |
| | | strIcon1, IMAGE_ICON, 32, 32, |
| | | LR_LOADFROMFILE | LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_DEFAULTSIZE); |
| | | hIcon2 = (HICON)::LoadImage(AfxGetInstanceHandle(), |
| | | strIcon2, IMAGE_ICON, 32, 32, |
| | | LR_LOADFROMFILE | LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_DEFAULTSIZE); |
| | | btn.SetBkgndColor(BS_NORMAL, TOP_TOOLBAR_BACKGROUND); |
| | | btn.SetBkgndColor(BS_PRESS, RGB(185, 209, 234)); |
| | | btn.SetBkgndColor(BS_DISABLE, TOP_TOOLBAR_BACKGROUND); |
| | | btn.SetFrameColor(BS_NORMAL, TOP_TOOLBAR_BACKGROUND); |
| | | btn.SetFrameColor(BS_PRESS, RGB(185, 209, 234)); |
| | | btn.SetFrameColor(BS_HOVER, RGB(185, 209, 234)); |
| | | btn.SetFrameColor(BS_DISABLE, TOP_TOOLBAR_BACKGROUND); |
| | | btn.SetIcon(hIcon1, hIcon2, 32); |
| | | } |
| | | |
| | | CWnd* CTopToolbar::GetBtn(UINT nId) |
| | | { |
| | | return GetDlgItem(nId); |
| | | } |
| | | |
| | | void CTopToolbar::SetOperatorBtnText(const char* pszText) |
| | | { |
| | | m_btnOperator.SetWindowText(pszText); |
| | | } |
| | | |
| | | BOOL CTopToolbar::OnCommand(WPARAM wParam, LPARAM lParam) |
| | | { |
| | | switch (LOWORD(wParam)) { |
| | | case IDC_BUTTON_RUN: |
| | | case IDC_BUTTON_STOP: |
| | | case IDC_BUTTON_ALARM: |
| | | case IDC_BUTTON_SETTINGS: |
| | | case IDC_BUTTON_ROBOT: |
| | | GetParent()->SendMessage(ID_MSG_TOOLBAR_BTN_CLICKED, 0, LOWORD(wParam)); |
| | | break; |
| | | } |
| | | |
| | | return CDialogEx::OnCommand(wParam, lParam); |
| | | } |
| | | |
| | | void CTopToolbar::OnButtonOperatorMenuClicked(NMHDR* pNMHDR, LRESULT* pResult) |
| | | { |
| | | BLBUTTON_NMHDR* pblbNmhdr = reinterpret_cast<BLBUTTON_NMHDR*>(pNMHDR); |
| | | GetParent()->SendMessage(ID_MSG_TOOLBAR_BTN_CLICKED, (int)pblbNmhdr->dwData, IDC_BUTTON_OPERATOR); |
| | | |
| | | |
| | | *pResult = 0; |
| | | } |
| | | |
| | | HMENU CTopToolbar::GetOperatorMenu() |
| | | { |
| | | return m_btnOperator.GetMenu(); |
| | | } |
| | | |
| | | BOOL CTopToolbar::PreTranslateMessage(MSG* pMsg) |
| | | { |
| | | if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE) { |
| | | return TRUE; |
| | | } |
| | | |
| | | return CDialogEx::PreTranslateMessage(pMsg); |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | #pragma once |
| | | #include "BlButton.h" |
| | | |
| | | |
| | | #define ID_MSG_TOOLBAR_BTN_CLICKED WM_USER + 20368 |
| | | |
| | | // CTopToolbar å¯¹è¯æ¡ |
| | | |
| | | class CTopToolbar : public CDialogEx |
| | | { |
| | | DECLARE_DYNAMIC(CTopToolbar) |
| | | |
| | | public: |
| | | CTopToolbar(CWnd* pParent = NULL); // æ åæé 彿° |
| | | virtual ~CTopToolbar(); |
| | | |
| | | |
| | | public: |
| | | CWnd* GetBtn(UINT nId); |
| | | void SetOperatorBtnText(const char* pszText); |
| | | HMENU GetOperatorMenu(); |
| | | |
| | | private: |
| | | void Resize(); |
| | | void InitBtn(CBlButton& btn, const char* pszIcon1, const char* pszIcon2); |
| | | |
| | | private: |
| | | COLORREF m_crBkgnd; |
| | | HBRUSH m_hbrBkgnd; |
| | | |
| | | |
| | | private: |
| | | CBlButton m_btnRun; |
| | | CBlButton m_btnStop; |
| | | CBlButton m_btnAlarm; |
| | | CBlButton m_btnSettings; |
| | | CBlButton m_btnRobot; |
| | | CBlButton m_btnOperator; |
| | | |
| | | |
| | | // å¯¹è¯æ¡æ°æ® |
| | | #ifdef AFX_DESIGN_TIME |
| | | enum { IDD = IDD_TOP_TOOLBAR }; |
| | | #endif |
| | | |
| | | protected: |
| | | virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV æ¯æ |
| | | |
| | | DECLARE_MESSAGE_MAP() |
| | | public: |
| | | virtual BOOL OnInitDialog(); |
| | | afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); |
| | | afx_msg void OnDestroy(); |
| | | afx_msg void OnSize(UINT nType, int cx, int cy); |
| | | virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam); |
| | | afx_msg void OnButtonOperatorMenuClicked(NMHDR* pNMHDR, LRESULT* pResult); |
| | | virtual BOOL PreTranslateMessage(MSG* pMsg); |
| | | }; |