C++(win32 api) 에서 EDITBOX 관련 질문입니다.

rpit1412의 이미지

안녕하세요,

하나의 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();
	}
 
}
klara의 이미지

C++은 처음이라고 하셨는데 GUI자체가 처음짜보시는게 아니신가요?
적으신 코드는 버튼이 눌렸을때 GUI 스레드를 막고서 실행됩니다.
GUI는 마법이 아닙니다. 별도로 비동기로 짜지 않는한 동기로 작동합니다.
하나의 이벤트 루프안에서 모든 이벤트가 동기화되어 처리되며,여기에는 화면 업데이트도 포함됩니다.
즉, OnBtnClick()함수가 끝날때까지 다른 모든 GUI이벤트 처리는 진행되지 않으며 당연히 화면도 갱신되지 않습니다.

rpit1412의 이미지

답변 감사합니다,

그 생각을 못했군요.. GUI자체가 처음입니다
사정상 기초부터 차근차근 쌓아나갈 시간이 없어서
만들면서 배우고 있으니 이렇게 문제가 생기네요 ^^;

비동기로 짜는게 유일한 방법인건지요..

에디트박스를 따로 컨트롤 할 수 있는 함수를 만들어서 호출하면 될까요..?
이걸로 해결이 될런지 모르지만 일단 다양한 방법으로 시도 해보겠습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.