ダイアログベース
設定の作成
ダイアログベースの初期画面
----LogonDemo.cpp
CLogonDemoDlg dlg;
m_pMainWnd = &dlg; // AfxGetMainWnd() -> CLogonDemoDlg의 객체를 얻음
INT_PTR nResponse = dlg.DoModal(); // 대화상자를 띄우는 코드
ダイアログベースのプロパティ
ウィンドウ画面を直感的に設定できる
static Text
Edit Control
Picture Control
----2Dlg.cpp
void CLogonDemo2Dlg::OnBnClickedCancel()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
CDialog::OnCancel();
}
void CLogonDemo2Dlg::OnBnClickedOk()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
CString strId;
CString strPwd;
GetDlgItemText(IDC_EDIT1, strId); // 화면의 값을 변수로 읽어 들임
GetDlgItemText(IDC_EDIT2, strPwd);
if (strId == _T("aaaa") && strPwd == _T("1234")) {
CDialog::OnOK();
}
else {
MessageBox(_T("아이디 또는 비밀번호가 잘못되었습니다."));
}
CDialog::OnOK();
}
初期化
----2Dlg.cpp
// 윈도우가 생성됬을 때 알려주는 메세지 : WM_CREATE
BOOL CLogonDemo2Dlg::OnInitDialog() // WM_INITDIAlOG
{
CDialog::OnInitDialog();
// 시스템 메뉴에 "정보..." 메뉴 항목을 추가합니다.
// IDM_ABOUTBOX는 시스템 명령 범위에 있어야 합니다.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != nullptr)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 이 대화 상자의 아이콘을 설정합니다. 응용 프로그램의 주 창이 대화 상자가 아닐 경우에는
// 프레임워크가 이 작업을 자동으로 수행합니다.
SetIcon(m_hIcon, TRUE); // 큰 아이콘을 설정합니다.
SetIcon(m_hIcon, FALSE); // 작은 아이콘을 설정합니다.
// TODO: 여기에 추가 초기화 작업을 추가합니다.
CString strText = _T("ID 입력");
SetDlgItemText(IDC_EDIT1, strText); // 초기 글자 입력
// 변수 값을 화면에 출력
return TRUE; // 포커스를 컨트롤에 설정하지 않으면 TRUE를 반환합니다.
}
コードに追加 ----Dlg.h public: afx_msg void OnBnClickedCancel(); afx_msg void OnBnClickedOk(); CString m_strID; }; ----Dlg.cpp void CLogonDemo2Dlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_strID); DDV_MaxChars(pDX, m_strID, 12); }
コードの変更
// 윈도우가 생성됬을 때 알려주는 메세지 : WM_CREATE
BOOL CLogonDemo2Dlg::OnInitDialog() // WM_INITDIAlOG
{
CDialog::OnInitDialog();
// 시스템 메뉴에 "정보..." 메뉴 항목을 추가합니다.
// IDM_ABOUTBOX는 시스템 명령 범위에 있어야 합니다.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != nullptr)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 이 대화 상자의 아이콘을 설정합니다. 응용 프로그램의 주 창이 대화 상자가 아닐 경우에는
// 프레임워크가 이 작업을 자동으로 수행합니다.
SetIcon(m_hIcon, TRUE); // 큰 아이콘을 설정합니다.
SetIcon(m_hIcon, FALSE); // 작은 아이콘을 설정합니다.
// TODO: 여기에 추가 초기화 작업을 추가합니다.
// 변수 값을 화면에 출력1
//CString strText = _T("ID 입력");
//SetDlgItemText(IDC_EDIT1, strText); // 초기 글자 입력
// 변수 값을 화면에 출력2
m_strID = _T("ID 입력");
UpdateData(FALSE);
return TRUE; // 포커스를 컨트롤에 설정하지 않으면 TRUE를 반환합니다.
}
/////////
void CLogonDemo2Dlg::OnBnClickedOk()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
//CString strId;
//CString strPwd;
//GetDlgItemText(IDC_EDIT1, strId); // 화면의 값을 변수로 읽어 들임
//GetDlgItemText(IDC_EDIT2, strPwd);
UpdateData();
if (m_strID == _T("aaaa") && m_strPW == _T("1234")) {
MessageBox(_T("로그인 성공"), _T("로그인"), MB_ICONEXCLAMATION | MB_OK);
CDialog::OnOK();
}
else {
MessageBox(_T("아이디 또는 비밀번호가 잘못되었습니다."));
}
//CDialog::OnOK();
}
オフセットデバッグ
----2.cpp
BOOL CLogonDemo2App::InitInstance()
{
// 애플리케이션 매니페스트가 ComCtl32.dll 버전 6 이상을 사용하여 비주얼 스타일을
// 사용하도록 지정하는 경우, Windows XP 상에서 반드시 InitCommonControlsEx()가 필요합니다.
// InitCommonControlsEx()를 사용하지 않으면 창을 만들 수 없습니다.
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
// 응용 프로그램에서 사용할 모든 공용 컨트롤 클래스를 포함하도록
// 이 항목을 설정하십시오.
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);
CWinApp::InitInstance();
AfxEnableControlContainer();
// 표준 초기화
// 이들 기능을 사용하지 않고 최종 실행 파일의 크기를 줄이려면
// 아래에서 필요 없는 특정 초기화
// 루틴을 제거해야 합니다.
// 해당 설정이 저장된 레지스트리 키를 변경하십시오.
// TODO: 이 문자열을 회사 또는 조직의 이름과 같은
// 적절한 내용으로 수정해야 합니다.
SetRegistryKey(_T("로컬 애플리케이션 마법사에서 생성된 애플리케이션"));
CLogonDemo2Dlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
TRACE("id = %d\n", dlg.m_strID); // Dlg.h 값 가져오기
TRACE("pwd = %d\n", dlg.m_strPW);
//AfxMessageBox(_T("로그인 성공"));
// MessageBox를 쓰려면 부모가 Wnd여야 함
// App의 부모는 Object임 -> messagebox를 호출 불가
// 따라서 전역함수인 AfxMessageBox로 호출
}
else if (nResponse == IDCANCEL)
{
// TODO: 여기에 [취소]를 클릭하여 대화 상자가 없어질 때 처리할
// 코드를 배치합니다.
}
else if (nResponse == -1)
{
TRACE(traceAppMsg, 0, "경고: 대화 상자를 만들지 못했으므로 애플리케이션이 예기치 않게 종료됩니다.\n");
}
#if !defined(_AFXDLL) && !defined(_AFX_NO_MFC_CONTROLS_IN_DIALOGS)
ControlBarCleanUp();
#endif
// 대화 상자가 닫혔으므로 응용 프로그램의 메시지 펌프를 시작하지 않고 응용 프로그램을 끝낼 수 있도록 FALSE를
// 반환합니다.
return FALSE;
}
Reference
この問題について(ダイアログベース), 我々は、より多くの情報をここで見つけました https://velog.io/@hj-yu-code/대화상자-기반テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol