본문 바로가기
C++/MFC

Dialog 생성 AfxBeginThread 이용 Thread 호출 예제 입니다.

by Hwoarang757 2024. 11. 9.

Thread는 계속 반복 하지 않고 , OnInitDialog가 호출 된 후 한번 만 실행되도록 테스트 하였습니다.

 

ex) CPrinterSetDlg.h

public:

	CWinThread* m_pThread;
	
	static UINT ThreadFunction(LPVOID _mothod);

	virtual BOOL OnInitDialog();

 

ex) CPrinterSetDlg.h

/// <summary>
/// AfxBeginThread를 이용하여 Thread를 생성 하고 호출 합니다.
/// </summary>
/// <returns></returns>
BOOL CPrinterSetDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// TODO:  여기에 추가 초기화 작업을 추가합니다.
	m_pThread = AfxBeginThread(ThreadFunction, this);
	m_pThread->m_bAutoDelete = TRUE;

	return TRUE;  // return TRUE unless you set the focus to a control
	// 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}


/// <summary>
/// Thread로 호출 할 Function을 작성 합니다.
/// </summary>
/// <param name="_mothod"></param>
/// <returns></returns>
UINT CPrinterSetDlg::ThreadFunction(LPVOID _mothod) 
{
	CPrinterSetDlg* pDlg = (CPrinterSetDlg*)_mothod;

	pDlg->m_strStatusText.SetWindowText(L"팝업창 호출이 되었습니다.");

	Sleep(1000);

	BlackIceDEVMODE* pDevMode = LoadBlackIceDEVMODE(L"Test Driver");

	Sleep(1000);
	SetPaperSize(9, pDevMode);
	pDlg->m_strStatusText.SetWindowTextW(L"SetPaperSize(9, pDevMode);");
	Sleep(1000);

	EnableFaxOutput(pDevMode);
	pDlg->m_strStatusText.SetWindowTextW(L"EnableFaxOutput(pDevMode);");
	Sleep(1000);

	SaveBlackIceDEVMODE(L"Test Driver", pDevMode);
	Sleep(1000);

	ReleaseBlackIceDEVMODE(pDevMode);
	Sleep(1000);

	pDlg->m_strStatusText.SetWindowTextW(L"BlackIceDevMode 설정이 완료 되었습니다.");
	Sleep(1000);

	return 0;
}

 

ex) 위에 생성한 Dialog를 호출 합니다.

void CBlackICEDevModeTestDlg::OnBnClickedOk()
{
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.

	CPrinterSetDlg dlg;
	dlg.DoModal();
	 
}