728x90
MFC Thread(쓰레드/스레드)에서 UpdateData() 함수 사용하기
이 포스트는 이전 블로그에서 이전된 포스트입니다.
쓰레드에서 직접 UpdateData() 함수를 수행하면 오류를 발생하고 불가능합니다.
아래와 같은 방법으로 우회하여 UpdateData() 함수의 기능을 사용할 수 있습니다.
먼저 헤더 파일에 아래와 같은 정의를 추가합니다.
1
|
#define CUSTOM_UPDATEDATA WM_USER
|
cs |
또한 함수 정의를 추가합니다. (5행만 추가하면 됩니다.)
1
2
3
4
5
6
|
class CnStrCheckerDlg : public CDialogEx
{
//..나머지 소스 생략
public:
afx_msg LRESULT ForCustomMessageFromThread(WPARAM wParam, LPARAM lParam);
};
|
cs |
이후 소스파일에서 아래와 같이 구현합니다.
1
2
3
4
5
6
7
8
9
|
BEGIN_MESSAGE_MAP(CTestDlg, CDialogEx)
ON_MESSAGE(CUSTOM_UPDATEDATA, ForCustomMessageFromThread)
END_MESSAGE_MAP()
LRESULT CTestDlg::ForCustomMessageFromThread(WPARAM wParam, LPARAM lParam)
{
UpdateData(FALSE);
return 0;
}
|
cs |
단, 보통 이미 BEGIN_MESSAGE_MAP(CTestDlg, CDialogEx) 구현되어 있습니다. 따라서 새로 추가하면 오류가 출력되니,
1~3번은 BEGIN_MESSAGE_MAP(CTestDlg, CDialogEx)로 찾아가서 2번만 추가해주세요.
아래처럼..
BEGIN_MESSAGE_MAP(CTestDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_CREATE()
ON_MESSAGE(CUSTOM_UPDATEDATA, ForCustomMessageFromThread) // 이 줄만 추가. 나머지는 이미 있음.
END_MESSAGE_MAP()
이제 쓰레드 안에서 아래 5~6행처럼 사용하면 UpdateData() 기능을 사용할 수 있습니다.
1
2
3
4
5
6
7
8
9
|
UINT CTestDlg::ThreadFirst(LPVOID _mothod)
{
CTestDlg *fir = (CTestDlg*)_mothod;
CTestDlg* pDlg = (CTestDlg*)AfxGetApp()->m_pMainWnd;
pDlg->PostMessage(CUSTOM_UPDATEDATA, 0, 0);
return 0;
}
|
cs |
728x90
'기타' 카테고리의 다른 글
포토샵에서 테두리에 패턴배경 넣기(사선 패턴 배경) (0) | 2022.01.02 |
---|---|
HTML 링크 걸기 / 이미지 링크 걸기 (0) | 2022.01.02 |
윈도우 IP 자동할당 스크립트 (batch 파일) (0) | 2022.01.02 |
(C/C++) 시저 암호 구현 예제 (Caesar cipher source) (0) | 2022.01.02 |
포토샵에서 ico 확장자로 저장 가능하도록 하기 (0) | 2022.01.02 |