找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 148|回复: 0

[每日一码] 一些ARX源码完整工程(带注释)

[复制链接]

1

主题

0

回帖

33

积分

管理员

积分
33
发表于 2024-3-14 20:57:24 | 显示全部楼层 |阅读模式
  1. // MyExam07Dlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "MyExam07Dlg.h"
  5. #include "exam07.h"
  6. #ifdef 采用DEBUG
  7. #define new DEBUG采用NEW
  8. #undef THIS采用FILE
  9. static char THIS采用FILE[] = 采用采用FILE采用采用;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // MyExam07Dlg dialog
  13. MyExam07Dlg::MyExam07Dlg(CWnd* pParent /*=NULL*/)
  14.   : CAcUiDialog(MyExam07Dlg::IDD, pParent)
  15. {
  16.   //{{AFX采用DATA采用INIT(MyExam07Dlg)
  17.     // NOTE: the ClassWizard will add member initialization here
  18.   //}}AFX采用DATA采用INIT
  19. }
  20. void MyExam07Dlg::DoDataExchange(CDataExchange* pDX)
  21. {
  22.   CAcUiDialog::DoDataExchange(pDX);
  23.   //{{AFX采用DATA采用MAP(MyExam07Dlg)
  24.   DDX采用Control(pDX, IDC采用COMBO采用REGAPPS, m采用ctrlRegAppComboBox);
  25.   DDX采用Control(pDX, IDC采用LIST采用BLOCKS, m采用ctrlBlockListBox);
  26.   DDX采用Control(pDX, IDC采用EDIT采用ZPT, m采用ctrlZPtEdit);
  27.   DDX采用Control(pDX, IDC采用EDIT采用YPT, m采用ctrlYPtEdit);
  28.   DDX采用Control(pDX, IDC采用EDIT采用XPT, m采用ctrlXPtEdit);
  29.   DDX采用Control(pDX, IDC采用EDIT采用ANGLE, m采用ctrlAngleEdit);
  30.   DDX采用Control(pDX, IDC采用BUTTON采用POINT, m采用ctrlPickButton);
  31.   DDX采用Control(pDX, IDC采用BUTTON采用ANGLE, m采用ctrlAngleButton);
  32.   //}}AFX采用DATA采用MAP
  33. }
  34. BEGIN采用MESSAGE采用MAP(MyExam07Dlg, CAcUiDialog)
  35.   //{{AFX采用MSG采用MAP(MyExam07Dlg)
  36.   ON采用BN采用CLICKED(IDC采用BUTTON采用ANGLE, OnButtonAngle)
  37.   ON采用BN采用CLICKED(IDC采用BUTTON采用POINT, OnButtonPoint)
  38.   ON采用CBN采用KILLFOCUS(IDC采用COMBO采用REGAPPS, OnKillfocusComboRegapps)
  39.   ON采用EN采用KILLFOCUS(IDC采用EDIT采用ANGLE, OnKillfocusEditAngle)
  40.   ON采用EN采用KILLFOCUS(IDC采用EDIT采用XPT, OnKillfocusEditXpt)
  41.   ON采用EN采用KILLFOCUS(IDC采用EDIT采用YPT, OnKillfocusEditYpt)
  42.   ON采用EN采用KILLFOCUS(IDC采用EDIT采用ZPT, OnKillfocusEditZpt)
  43.   //}}AFX采用MSG采用MAP
  44. END采用MESSAGE采用MAP()
  45. /////////////////////////////////////////////////////////////////////////////
  46. // MyExam07Dlg message handlers
  47. BOOL MyExam07Dlg::OnInitDialog()
  48. {
  49.   SetDialogName("exam07:MyExam07Dlg");
  50.   CAcUiDialog::OnInitDialog();
  51.   DLGCTLINFO dlgSizeInfo[]= {
  52.     { IDC采用STATIC采用GROUP1, ELASTICX, 20 },
  53.     { IDC采用STATIC采用GROUP1, ELASTICY, 100 },
  54.     { IDC采用EDIT采用XPT,ELASTICX, 20 },
  55.     { IDC采用EDIT采用YPT,ELASTICX, 20 },
  56.     { IDC采用EDIT采用ZPT,ELASTICX, 20 },
  57.     { IDC采用EDIT采用ANGLE, ELASTICX, 20 },
  58.     { IDC采用STATIC采用GROUP2, MOVEX, 20 },
  59.     { IDC采用STATIC采用GROUP2, ELASTICY, 100 },
  60.     { IDC采用STATIC采用GROUP2, ELASTICX, 80 },
  61.     { IDC采用LIST采用BLOCKS, MOVEX, 20 },
  62.     { IDC采用LIST采用BLOCKS, ELASTICY, 100 },
  63.     { IDC采用STATIC采用TEXT2,MOVEX, 20 },
  64.     { IDC采用STATIC采用TEXT2,MOVEY, 100 },
  65.     { IDC采用LIST采用BLOCKS, ELASTICX, 80 },
  66.     { IDC采用STATIC采用TEXT2,ELASTICX, 80 },
  67.     { IDC采用STATIC采用GROUP3, MOVEY, 100 },
  68.     { IDC采用STATIC采用GROUP3, ELASTICX, 20 },
  69.     { IDC采用COMBO采用REGAPPS, MOVEY, 100 },
  70.     { IDC采用COMBO采用REGAPPS, ELASTICX, 20 },
  71.     { IDC采用STATIC采用TEXT3,MOVEY, 100 },
  72.     { IDC采用STATIC采用TEXT3,ELASTICX, 20 },
  73.     { IDOK,MOVEX, 100 },
  74.     { IDCANCEL, MOVEX, 100 },
  75.   };
  76.   const DWORD numberofentries =
  77.     sizeof dlgSizeInfo / sizeof DLGCTLINFO;
  78.   SetControlProperty(dlgSizeInfo, numberofentries);
  79.   m采用ctrlXPtEdit.SetRange(-50.0, 50.0);
  80.   m采用ctrlYPtEdit.SetRange(-50.0, 50.0);
  81.   m采用ctrlZPtEdit.SetRange(-50.0, 50.0);
  82.   
  83.   m采用ctrlAngleEdit.SetRange(0.0, 90.0 /*(PI/2.0)*/);
  84.   
  85.   SetWindowText("AcUiDialog Sample");
  86.   
  87.   m采用ctrlPickButton.AutoLoad();
  88.   m采用ctrlAngleButton.AutoLoad();
  89.   
  90.   if (!GetDialogData("ANGLE", m采用strAngle))
  91.     m采用strAngle = "0.0";
  92.   if (!GetDialogData("POINTX", m采用strXPt))
  93.     m采用strXPt = "0.0";
  94.   if (!GetDialogData("POINTY", m采用strYPt))
  95.     m采用strYPt = "0.0";
  96.   if (!GetDialogData("POINTZ", m采用strZPt))
  97.     m采用strZPt = "0.0";
  98.   DisplayPoint();
  99.   DisplayAngle();
  100.   DisplayBlocks();
  101.   DisplayRegApps();
  102.   return TRUE;
  103. }
  104. void MyExam07Dlg::DisplayPoint()
  105. {
  106.   m采用ctrlXPtEdit.SetWindowText(m采用strXPt);
  107.   m采用ctrlXPtEdit.Convert();
  108.   m采用ctrlYPtEdit.SetWindowText(m采用strYPt);
  109.   m采用ctrlYPtEdit.Convert();
  110.   m采用ctrlZPtEdit.SetWindowText(m采用strZPt);
  111.   m采用ctrlZPtEdit.Convert();
  112. }
  113. bool MyExam07Dlg::ValidatePoint()
  114. {
  115.   if (!m采用ctrlXPtEdit.Validate())
  116.     return false;
  117.   if (!m采用ctrlYPtEdit.Validate())
  118.     return false;
  119.   if (!m采用ctrlZPtEdit.Validate())
  120.     return false;
  121.   return true;
  122. }
  123. void MyExam07Dlg::DisplayAngle()
  124. {
  125.   m采用ctrlAngleEdit.SetWindowText(m采用strAngle);
  126.   m采用ctrlAngleEdit.Convert();
  127. }
  128. bool MyExam07Dlg::ValidateAngle()
  129. {
  130.   if (!m采用ctrlAngleEdit.Validate())
  131.     return false;
  132.   return true;
  133. }
  134. void MyExam07Dlg::DisplayBlocks()
  135. {
  136.   AcDbBlockTable *pBlockTable;
  137.   acdbHostApplicationServices()->workingDatabase()
  138.     ->getSymbolTable(pBlockTable, AcDb::kForRead);
  139.   char *pName;
  140.   AcDbBlockTableIterator *pBTItr;
  141.   if (pBlockTable->newIterator(pBTItr) == Acad::eOk)
  142.   {
  143.     while (!pBTItr->done())
  144.     {
  145.       AcDbBlockTableRecord *pRecord;
  146.       if (pBTItr->getRecord(pRecord, AcDb::kForRead)
  147.         == Acad::eOk)
  148.       {
  149.         pRecord->getName(pName);
  150.         m采用ctrlBlockListBox.InsertString(-1, pName);
  151.         pRecord->close();
  152.       }
  153.       pBTItr->step();
  154.     }
  155.   }
  156.   pBlockTable->close();
  157. }
  158. void MyExam07Dlg::DisplayRegApps()
  159. {
  160.   AcDbRegAppTable *pRegAppTable;
  161.   acdbHostApplicationServices()->workingDatabase()
  162.     ->getSymbolTable(pRegAppTable, AcDb::kForRead);
  163.   char *pName;
  164.   AcDbRegAppTableIterator *pItr;
  165.   if (pRegAppTable->newIterator(pItr) == Acad::eOk)
  166.   {
  167.     while (!pItr->done())
  168.     {
  169.       AcDbRegAppTableRecord *pRecord;
  170.       if (pItr->getRecord(pRecord, AcDb::kForRead)
  171.         == Acad::eOk)
  172.       {
  173.         pRecord->getName(pName);
  174.         m采用ctrlRegAppComboBox.InsertString(-1, pName);
  175.         pRecord->close();
  176.       }
  177.       pItr->step();
  178.     }
  179.   }
  180.   pRegAppTable->close();
  181. }
  182. void MyExam07Dlg::OnButtonAngle()
  183. {
  184.   BeginEditorCommand();
  185.   ads采用point pt;
  186.   acdbDisToF(m采用strXPt, -1, &pt[X]);
  187.   acdbDisToF(m采用strYPt, -1, &pt[Y]);
  188.   acdbDisToF(m采用strZPt, -1, &pt[Z]);
  189.   double angle;
  190.   
  191.   if (acedGetAngle(pt, "\nPick an angle: ", &angle) == RTNORM) {
  192.   
  193.     CompleteEditorCommand();
  194.    
  195.     m采用strAngle.Format("%g", angle*(180.0/PI));
  196.     DisplayAngle();
  197.   }
  198.   else
  199.   {
  200.     CancelEditorCommand();
  201.   }
  202. }
  203. void MyExam07Dlg::OnButtonPoint()
  204. {
  205.   BeginEditorCommand();
  206.   ads采用point pt;
  207.   
  208.   if (acedGetPoint(NULL, "\nPick a point: ", pt) == RTNORM) {
  209.     CompleteEditorCommand();
  210.     m采用strXPt.Format("%g", pt[X]);
  211.     m采用strYPt.Format("%g", pt[Y]);
  212.     m采用strZPt.Format("%g", pt[Z]);
  213.     DisplayPoint();
  214.   }
  215.   else
  216.   {
  217.     CancelEditorCommand();
  218.   }
  219. }
  220. void MyExam07Dlg::OnKillfocusEditAngle()
  221. {
  222.   m采用ctrlAngleEdit.Convert();
  223.   m采用ctrlAngleEdit.GetWindowText(m采用strAngle);
  224. }
  225. void MyExam07Dlg::OnKillfocusEditXpt()
  226. {
  227.   m采用ctrlXPtEdit.Convert();
  228.   m采用ctrlXPtEdit.GetWindowText(m采用strXPt);
  229. }
  230. void MyExam07Dlg::OnKillfocusEditYpt()
  231. {
  232.   m采用ctrlYPtEdit.Convert();
  233.   m采用ctrlYPtEdit.GetWindowText(m采用strYPt);
  234. }
  235. void MyExam07Dlg::OnKillfocusEditZpt()
  236. {
  237.   m采用ctrlZPtEdit.Convert();
  238.   m采用ctrlZPtEdit.GetWindowText(m采用strZPt);
  239. }
  240. void MyExam07Dlg::OnKillfocusComboRegapps()
  241. {
  242.   CString strFromEdit;
  243.   m采用ctrlRegAppComboBox.GetWindowText(strFromEdit);
  244.   if (m采用ctrlRegAppComboBox.FindString(-1, strFromEdit) == CB采用ERR)
  245.     if (acdbRegApp(strFromEdit) == RTNORM)
  246.       m采用ctrlRegAppComboBox.AddString(strFromEdit);
  247. }
  248. void MyExam07Dlg::OnOK()
  249. {
  250.   if (!ValidatePoint())
  251.   {
  252.     AfxMessageBox("Sorry, Point out of desired range.");
  253.     m采用ctrlXPtEdit.SetFocus();
  254.     return;
  255.   }
  256.   if (!ValidateAngle())
  257.   {
  258.     AfxMessageBox("Sorry, Angle out of desired range.");
  259.     m采用ctrlAngleEdit.SetFocus();
  260.     return;
  261.   }
  262.   SetDialogData("ANGLE", m采用strAngle);
  263.   SetDialogData("POINTX", m采用strXPt);
  264.   SetDialogData("POINTY", m采用strYPt);
  265.   SetDialogData("POINTZ", m采用strZPt);
  266.   CAcUiDialog::OnOK();
  267. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-29 21:44 , Processed in 0.139352 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表