Microsoft MVP성태의 닷넷 이야기
안녕하십니까 루프안에서 메세지처리에 관하여 질문드립니다! [링크 복사], [링크+제목 복사],
조회: 3576
글쓴 사람
이건우 (rjsdn101 at naver.com)
홈페이지
첨부 파일
 

안녕하세요 성태님 일전에 dll관련 질문드렸던 이건우입니다
다름아니라 사인패드에 연결하고 사용자의 패드입력을 기다리는 동안 윈폼에 입력된 메세지들을 처리하는데 문제가 생겼습니다.
기존의 C++에서 작성된 소스입니다. 예제 프로젝트를 첨부하기가 어려운상황이라 죄송합니다.. 문제가 되면 글 삭제해주시면 감사하겠습니다.
bool bDone = false;
MSG msg;
while(!iDone)
{
  //사인패드API가 사용자가 확인이나 취소를 할경우 bDone이 true가 되어 루프탈출하는 소스부분 이후 메세지처리

  while(PeekMessage(&msg, NUL, 0, 0, PM_REMOVE)) //메세지꺼내옴
  {
      if(msg,message == WM_QUIT)
      {
           bDone = true;
      }
      else
      {
           TransLateMessage(&msg); //키보드메세지를 WM_CHAR로 변경
           DispatchMessage(&msg); //윈도우프로시저에 메세지를 보낸다
      }
  }
}
기능을 보자면 WM_QUIT 이외에 메시지가 메시지 큐에 있었다면 메시지를 처리하고 큐에서 제거하는것으로 보입니다. WM_QUIT 메세지면 루프 종료이구요.
이를 C#에서 구현해보려고 찾아보니 System.Windows.Forms.Application.DoEvents(); 을 발견했는데
둘이 똑같이 동작하는지 WM_QUIT 체크부분이 빠지고 메세지를 처리하는지 궁금합니다. 질문을 정리해보겠습니다.

1. C++의 구현부와 C#의 DoEvents() 가 같은 동작을 기대해도 될까요?

2. 같은 동작을 기대하기 어렵다면 일전의 PInvoke를 통해 peekmessage , translatemessage 등을 가져와서 처리해도 될까요?



      








[최초 등록일: ]
[최종 수정일: 1/2/2023]


비밀번호

댓글 작성자
 



2023-01-02 07시32분
1. 아주 동일하진 않지만 대충 비슷하게는 맞습니다.
2. 어디까지 같은 것을 원하는 것인지를 알 수 없어 100% 확신을 드릴 수는 없지만, 만약 원하는 결과가 나오지 않는다면 어차피 P/Invoke 호출이 어렵지 않으니 그냥 메시지 루프 API를 직접 호출해도 되지 않을까요?

그다지, 어려운 선택의 문제는 아닐 것입니다.
정성태
2023-01-03 09시45분
[이건우] 항상 감사합니다~ 좋은 한 주 되세요
[guest]

[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
5936ds4/26/2024928활성화 되어 있는 커뮤니티 발견하게 되어 기분이 좋습니다. 자주 놀러 올께요. (내용 없습니다. [1]
5935양승조 donator4/25/2024883Reflection 관련 질문 드립니다. [5]파일 다운로드1
5934양승조 donator4/24/2024708Reflection 관련 질문 드립니다. [1]
5933vict...4/23/2024723cpp 라이브러리 디버깅 방법 문의 드립니다. [1]
5932EK4/12/20241125다음 제네릭에서 널익셉션이 뜨는 이유를 알수있을까요? [1]
5931이대희4/2/20241329Windows 앱 SDK C# 템플릿의 용도가 무엇인지요? [1]
5930vict...2/22/20242102ef core, FromSqlRaw 맵핑 질문입니다. [4]
5929a2/17/20242143.Net 8 에서 디버거 변경 [1]
5928vict...2/5/20242498wpf에서 대량 데이터 보여주는 방법 추천 부탁드립니다. [1]
5926엄태영1/12/20242480잘못된 Task 사용으로 인한 데드락 관련 질문 입니다. [3]
5925Euni...12/22/20232275Visual Studio에서 nodejs 사용시 npm install -g @vue/cli 실행시 오류 [1]
5924Euni...12/21/20232340Visual Studio에서 nodejs 사용시 C:\Program Files\nodejs\\node.exe" "C:\Program Files\nodejs\\node_modules\npm\bin\npm-cli.js" prefix -g 를 찾지 못하는 설치 오류 [2]
5923정두호12/4/20232787MSSQL 데이터 전송과 공유폴더의 데이터 전송 차이점 [1]
5922Heeg...10/27/20235019C++의 double pointer를 C#에서 구현하는 방법이 잘 안됩니다. [3]
5921한예지 donator10/3/20234774마샬링 정의 및 목적이 궁금합니다. [5]
5920한예지 donator10/3/20233691C#과 WIN32 API 관계 질문드립니다. [4]
5919이건우9/27/20233268WinForm의 로딩속도 관련 질문입니다 [2]
5917한예지 donator9/14/20233365동기화 도구 질문 있습니다. [4]
5916한예지 donator9/3/20233501Thread.Sleep(500), await Task.Delay(500), Task.Delay(500) 차이점이 궁금합니다. [2]
5915한예지 donator8/30/20233407비동기 코드를 for 문 안에 작성한 경우 제어 변수가 올바르게 동작하지 않는 이유가 궁금합니다. [3]
5914한상욱8/11/20233294.net wpf에서 skiasharp 의 skelement 를 canvas로 사용 하고 있습니다. [1]
5913김태우8/10/20233342지역변수로 이해하는 메서드매개변수 게시글 댓글 [3]
5912guest4/25/20235752[참고 - 초보용] Sqlite 디비는 double이 없고 Real이 대신합니다 [3]
5911guest4/24/20233910Form1.cs와 외부 class.cs와 통신 (static async method포함) [4]파일 다운로드1
5910guest4/24/20233741Async 메서드와 try~catch [1]
[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...