C++(win32 api) 에서 EDITBOX 관련 질문입니다.
글쓴이: rpit1412 / 작성시간: 일, 2015/04/19 - 6:24오후
안녕하세요,
하나의 EDITBOX에 여러가지 상태 메세지를 출력하려고 합니다.
메세지를 SetWindowText(~) 함수를 통해서 출력을 하고 있는데요,
예를들면
STATUS 에디트박스가 있고
버튼을 누르면 체크박스를 확인해서
각 체크박스마다 연결된 함수를 실행하는 구조에서 어떤 함수 실행중! 이라는 느낌으로 STATUS 에디트박스에 메세지를 넣고싶습니다.
중복체크하면 순서대로 메세지를 출력해야하는데 마지막 체크버튼에 대한 메세지만 출력이 됩니다.
실행되는 시간이 짧다고 생각했지만 각 함수들이 소켓통신을 하는거라 실행시간이 각 1초씩은 되구요,
메세지 출력을 각 함수 실행 전에 놔두나 후에 놔두나 전혀 다른점이 보이지가 않네요
제가 C++쪽을 처음 다뤄봐서.. 어처구니 없는 질문일수도 있지만 에디트 출력같은건 타이밍이 다르고 그러진 않겠죠..?
딜레이같은걸 줘야하는지, 다른 방법이 있는지 조언 부탁드립니다.
해당부분 소스 첨부합니다. 각 함수명과 변수는 임의대로 변경했습니다.
void OnBtnClick( HWND hDlg ) { SetWindowText( GetDlgItem( hDlg, IDC_EDIT_STATUS ), "Click Button" ); if ( SendDlgItemMessage( hDlg, IDC_CHECK_1, BM_GETCHECK, 0, 0) == BST_CHECKED ) { SetWindowText( GetDlgItem( hDlg, IDC_EDIT_STATUS ), "Changing 1" ); Func1(); Func2(); Func3(); Func4(); } if ( SendDlgItemMessage( hDlg, IDC_CHECK_2, BM_GETCHECK, 0, 0) == BST_CHECKED ) { SetWindowText( GetDlgItem( hDlg, IDC_EDIT_STATUS ), "Changing 2" ); Func5(); Func6(); Func7(); Func8(); } if ( SendDlgItemMessage( hDlg, IDC_CHECK_3, BM_GETCHECK, 0, 0) == BST_CHECKED ) { SetWindowText( GetDlgItem( hDlg, IDC_EDIT_STATUS ), "Changing 3" ); Func9(); } }
Forums:
C++은 처음이라고 하셨는데 GUI자체가
C++은 처음이라고 하셨는데 GUI자체가 처음짜보시는게 아니신가요?
적으신 코드는 버튼이 눌렸을때 GUI 스레드를 막고서 실행됩니다.
GUI는 마법이 아닙니다. 별도로 비동기로 짜지 않는한 동기로 작동합니다.
하나의 이벤트 루프안에서 모든 이벤트가 동기화되어 처리되며,여기에는 화면 업데이트도 포함됩니다.
즉, OnBtnClick()함수가 끝날때까지 다른 모든 GUI이벤트 처리는 진행되지 않으며 당연히 화면도 갱신되지 않습니다.
답변 감사합니다, 그 생각을 못했군요..
답변 감사합니다,
그 생각을 못했군요.. GUI자체가 처음입니다
사정상 기초부터 차근차근 쌓아나갈 시간이 없어서
만들면서 배우고 있으니 이렇게 문제가 생기네요 ^^;
비동기로 짜는게 유일한 방법인건지요..
에디트박스를 따로 컨트롤 할 수 있는 함수를 만들어서 호출하면 될까요..?
이걸로 해결이 될런지 모르지만 일단 다양한 방법으로 시도 해보겠습니다.
댓글 달기