void CChemStudioView::OnAddatom()
{
Dialog_AddAtom::CreateDlg(this);
}
void Dialog_AddAtom::CreateDlg(CWnd* wnd)
{
if (dlg_ptr == NULL)
{
dlg_ptr = new Dialog_AddAtom();
dlg_ptr->Create(IDD_ADDATOMDLG, wnd);
dlg_ptr->ShowWindow(SW_SHOW);
}
else return;
}
void Dialog_AddAtom::CloseDlg()
{
dlg_ptr->DestroyWindow();
delete dlg_ptr;
dlg_ptr = NULL;
}
bool Dialog_AddAtom::IsOpen()
{
return dlg_ptr;
}
// Dialog_AddAtom 訊息處理程式
BOOL Dialog_AddAtom::OnInitDialog()
{
CDialogEx::OnInitDialog();
CONTROLINIT(atomInput, IDC_ATOMIPT);
CONTROLINIT(colorRect, IDC_COLORCHOICE);
CONTROLINIT(atomWtDisp, IDC_ATOMWTDISP);
CONTROLINIT(atomLbDisp, IDC_ATOMLBDISP);
int index = 0;
CString str;
for (CString i : CAtom::ElementSymbol)
{
str.Format("%d.%s", index, i);
atomInput->AddString(str);
index++;
}
atomInput->SetCurSel(0);
CString s;
s.Format("原子量:%.2f", CAtom::ElementWt[atomInput->GetCurSel()]);
atomWtDisp->SetWindowText(s);
s.Format("原子名稱:%s", CAtom::ElementLabel[atomInput->GetCurSel()]);
atomLbDisp->SetWindowText(s);
CDC *pDC = colorRect->GetDC();
CRect rct;
colorRect->GetWindowRect(&rct);
CBrush brs;
brs.CreateSolidBrush(RGB(0, 0, 0));
CRect picrct;
picrct.top = 0;
picrct.left = 0;
picrct.bottom = rct.Height();
picrct.right = rct.Width();
pDC->FillRect(&picrct, &brs);
result.atomNo = CAtom::Unknown;
result.color = RGB(0, 0, 0);
// TODO: 在此添加額外的初始化
return true; // return TRUE unless you set the focus to a control
// 例外: OCX 屬性頁應回傳 FALSE
}
void Dialog_AddAtom::OnBnClickedBtnapply()
{
CAtom::AtomNum no = CAtom::Unknown;
CString s;
atomInput->GetWindowText(s);
for (int i = 0; i <= 118; i++)
{
CString idx;
idx.Format("%d", i);
CString parse;
parse.Format("%d.%s", i, CAtom::ElementSymbol[i]);
if ((CAtom::ElementSymbol[i] == s) || (idx == s) || (parse == s))
{
no = (CAtom::AtomNum)i;
break;
}
}
s.Format("原子名稱:%s", CAtom::ElementLabel[no]);
atomLbDisp->SetWindowText(s);
s.Format("原子量:%.2f", CAtom::ElementWt[no]);
atomWtDisp->SetWindowText(s);
result.atomNo = no;
}
void Dialog_AddAtom::OnClose()
{
// TODO: 在此添加訊息處理程式代碼和/或呼叫默認值
CDialogEx::OnClose();
CloseDlg();
}
點擊按鈕后:
DEBUG ASSERTION FAILED!
所有控制元件全變成0xdddd.......了(之前initdialog已經通過宏定義GetDlgItem過了),求解釋
uj5u.com熱心網友回復:
頭檔案:#include "CAtom.h"
class Dialog_AddAtom : public CDialogEx
{
DECLARE_DYNAMIC(Dialog_AddAtom)
public:
struct AtomInfo
{
COLORREF color;
CAtom::AtomNum atomNo;
};
protected:
CComboBox * atomInput;
CStatic* atomWtDisp;
CStatic* atomLbDisp;
CStatic* colorRect;
static Dialog_AddAtom* dlg_ptr;
AtomInfo result;
public:
Dialog_AddAtom(CWnd* pParent = nullptr); // 標準建構式
virtual ~Dialog_AddAtom();
public:
static void CreateDlg(CWnd* wnd);
static void CloseDlg();
static bool IsOpen();
// 對話框資料
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_ADDATOMDLG };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
public:
virtual BOOL OnInitDialog();
afx_msg void OnStnClickedColorchoice();
afx_msg void OnBnClickedBtnapply();
afx_msg void OnClose();
};
uj5u.com熱心網友回復:
學會使用資料斷點:#include <time.h>
#include <stdlib.h>
#include <windows.h>
int main() {
int a,b[11];//本來是b[10],為判斷哪句越界,故意宣告為b[11]
srand((unsigned int)time(NULL));//按兩次F11,等黃色右箭頭指向本行時,除錯、新建斷點、新建資料斷點,地址:&b[10],位元組計數:4,確定。
while (1) {//按F5,會停在下面某句,此時a的值為10,b[10]已經被修改為對應0..4之一。
b[(a=rand()%11)]=0;
Sleep(100);
b[(a=rand()%11)]=1;
Sleep(100);
b[(a=rand()%11)]=2;
Sleep(100);
b[(a=rand()%11)]=3;
Sleep(100);
b[(a=rand()%11)]=4;
Sleep(100);
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/70000.html
標籤:基礎類
上一篇:請問 CListCtrl LVS_ICON 模式下,插入圖示不能正確按插入位置顯示問題
下一篇:MFC 遍歷檔案名寫入陣列
