<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=MFC%2FMessageMap</id>
	<title>MFC/MessageMap - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=MFC%2FMessageMap"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=MFC/MessageMap&amp;action=history"/>
	<updated>2026-05-14T16:58:21Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=MFC/MessageMap&amp;diff=87204&amp;oldid=prev</id>
		<title>Maintenance script: Table transclusion repair v1</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=MFC/MessageMap&amp;diff=87204&amp;oldid=prev"/>
		<updated>2026-03-27T12:46:17Z</updated>

		<summary type="html">&lt;p&gt;Table transclusion repair v1&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 12:46, 27 March 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{|&lt;/del&gt;__TOC__&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|}}&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;__TOC__&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= MessageMap =&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;= MessageMap =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;이벤트의 발생과 함께 전달되는 메시지를 처리하는 메시지 맵에 대한 설명이다. 하단의 소스는 AppWizard가 기본적으로 생성한 코드에서 발췌한 것이다.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;이벤트의 발생과 함께 전달되는 메시지를 처리하는 메시지 맵에 대한 설명이다. 하단의 소스는 AppWizard가 기본적으로 생성한 코드에서 발췌한 것이다.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=MFC/MessageMap&amp;diff=84622&amp;oldid=prev</id>
		<title>Maintenance script: Repair batch-0002 pages from live compare</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=MFC/MessageMap&amp;diff=84622&amp;oldid=prev"/>
		<updated>2026-03-27T00:16:07Z</updated>

		<summary type="html">&lt;p&gt;Repair batch-0002 pages from live compare&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 00:16, 27 March 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l534&quot;&gt;Line 534:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 534:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;----&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[MFC]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[MFC]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=MFC/MessageMap&amp;diff=34424&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:23, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=MFC/MessageMap&amp;diff=34424&amp;oldid=prev"/>
		<updated>2021-02-07T05:23:42Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{|__TOC__|}}&lt;br /&gt;
= MessageMap =&lt;br /&gt;
이벤트의 발생과 함께 전달되는 메시지를 처리하는 메시지 맵에 대한 설명이다. 하단의 소스는 AppWizard가 기본적으로 생성한 코드에서 발췌한 것이다.&lt;br /&gt;
&lt;br /&gt;
자료) [http://wiki.zeropage.org/jsp-new/pds/pds_read.jsp?page=1&amp;amp;no=23 자료실]&lt;br /&gt;
= 사용자 정의 메시지 발생시키기 =&lt;br /&gt;
* 사용자 정의 메시지란 : 특정한 시점에서 메시지를 보내서 다른 객체의 함수를 실행 시킬수 있다.  굉장히 유용하다.  일종의 콜백 함수 역할을 수행할 수 있는것이다.  즉 어떠한 다른 클래스에서 특정 시점에서 다른 객체의 특정 함수를 실행시켜야 할 필요가 있을때 사용하면 유용하고, 소켓 프로그래밍에서 자주 사용된다.&lt;br /&gt;
** 사용 예 : 어떤 클래스가 view 클래스의 멤버 변수이다.  해당 클래스는 파일을 다운로드 받는 클래스인데 해당 클래스에서 다운로드가 끝났을 경우  view에 있는 serialize 함수를 실행해야 한다.  허나 현재 view클래스가 그 해당 클래스를 멤버로 가지고 있기에 include 로 해당 클래스에서 view 클래스를 포함할 수도 없고, 또 view 클래스의 현재 실행되는 객체를 얻을 방법도 마땅히 없다.  이때 해당 클래스에서 다운로드가 끝난 시점에서 다운로드가 끝났다는 메시지를 발생시켜서 view에 있는 serialize 함수를 실행시킬 수 있다.  이게 바로 사용자 정의 메시지 발생을 이용한 사례..&lt;br /&gt;
 .h // 헤더 파일&lt;br /&gt;
 #define UM_ACCEPTCLIENT (WM_USER+10) // 사용자 정의 메시지를 정의 한다.&lt;br /&gt;
 	//}}AFX_MSG&lt;br /&gt;
 	afx_msg LRESULT OnAcceptClient(WPARAM wParam, LPARAM lParam); // 이부분에 이렇게 정의한 메시지를 실행할 함수를 넣어준다. 함수명은 하고 싶은데로..&lt;br /&gt;
 	DECLARE_MESSAGE_MAP()&lt;br /&gt;
 &lt;br /&gt;
 .cpp //구현 파일&lt;br /&gt;
 begin Message map&lt;br /&gt;
 ON_MESSAGE(UM_ACCEPTCLIENT, OnAcceptClient) // 이부분에서  UM_ACCEPTCLIENT가 발생하면 OnAcceptClient함수를 실행시킨다고 맵핑한다.&lt;br /&gt;
 end messagemap&lt;br /&gt;
 &lt;br /&gt;
 afx_msg LRESULT OnAcceptClient(WPARAM wParam, LPARAM lParam)&lt;br /&gt;
 {&lt;br /&gt;
 구현&lt;br /&gt;
 }	&lt;br /&gt;
 &lt;br /&gt;
 사용&lt;br /&gt;
 m_pWnd-&amp;amp;gt;SendMessage(UM_ACCEPTCLIENT);	&lt;br /&gt;
= Code Part =&lt;br /&gt;
in &amp;#039;&amp;#039;application_name.h&amp;#039;&amp;#039;&lt;br /&gt;
 class CEx14App : public CWinApp&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
 	CEx14App();&lt;br /&gt;
 &lt;br /&gt;
 // Overrides&lt;br /&gt;
 	// ClassWizard generated virtual function overrides&lt;br /&gt;
 	//{{AFX_VIRTUAL(CEx14App)&lt;br /&gt;
 	public:&lt;br /&gt;
 	virtual BOOL InitInstance();&lt;br /&gt;
 	//}}AFX_VIRTUAL&lt;br /&gt;
 &lt;br /&gt;
 	// 메시지 맵이 정의된 부분이다.&lt;br /&gt;
 // Implementation&lt;br /&gt;
 	//{{AFX_MSG(CEx14App)&lt;br /&gt;
 	afx_msg void OnAppAbout();		// 위저드로 생성되는 기본 코드에서는 오로지 ID_APP_ABOUT 매시지 만을 처리하는 함수가 존재한다.&lt;br /&gt;
 		// NOTE - the ClassWizard will add and remove member functions here.&lt;br /&gt;
 		//    DO NOT EDIT what you see in these blocks of generated code !&lt;br /&gt;
 	//}}AFX_MSG&lt;br /&gt;
 	DECLARE_MESSAGE_MAP()		// 메시지 맵이 정의된 클래스에는 반드시 이 매크로 함수가 포함되어야 한다.&lt;br /&gt;
 								// 수동으로 매시지 맵을 추가하려고 한다면 반드시 이 부분을 추가해야한다.&lt;br /&gt;
 };&lt;br /&gt;
 &amp;#039;&amp;#039;매시지를 처리할 수 있는 클래스는 MFC의 계층구조상 CCmdTarget 클래스를 상속받은 클래스라면 어디서든 가능하다.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
in &amp;#039;&amp;#039;application_name.cpp&amp;#039;&amp;#039;&lt;br /&gt;
 BEGIN_MESSAGE_MAP(CEx14App, CWinApp)&lt;br /&gt;
 	//{{AFX_MSG_MAP(CEx14App)&lt;br /&gt;
 	ON_COMMAND(ID_APP_ABOUT, OnAppAbout)&lt;br /&gt;
 		// NOTE - the ClassWizard will add and remove mapping macros here.&lt;br /&gt;
 		//    DO NOT EDIT what you see in these blocks of generated code!&lt;br /&gt;
 	//}}AFX_MSG_MAP&lt;br /&gt;
 	// Standard file based document commands&lt;br /&gt;
 	ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)&lt;br /&gt;
 	ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)&lt;br /&gt;
 	// Standard print setup command&lt;br /&gt;
 	ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)&lt;br /&gt;
 END_MESSAGE_MAP()&lt;br /&gt;
 클래스의 정의 부분에 DECLARE_MESSAGE_MAP()을 포함했다면 그 클래스의 구현 부분에는 반드시 BEGIN_MESSAGE_MAP(), END_MESSAGE_MAP()매크로가 반드시 추가되어야 한다. 이 부분에서는 WM_COMMAND 형태를 갖는 메시지 만을 처리하고 있다.&lt;br /&gt;
 ON_COMMAND() 매크로 함수는 지정된 메시지 식별자(ID_..)와 특정 함수를 묶어주는 역할을 한다.&lt;br /&gt;
&lt;br /&gt;
in &amp;#039;&amp;#039;CAboutDlg implementation&amp;#039;&amp;#039;&lt;br /&gt;
 class CAboutDlg : public CDialog&lt;br /&gt;
 {&lt;br /&gt;
 public:&lt;br /&gt;
 	CAboutDlg();&lt;br /&gt;
 &lt;br /&gt;
 // Dialog Data&lt;br /&gt;
 	//{{AFX_DATA(CAboutDlg)&lt;br /&gt;
 	enum { IDD = IDD_ABOUTBOX };&lt;br /&gt;
 	//}}AFX_DATA&lt;br /&gt;
 &lt;br /&gt;
 	// ClassWizard generated virtual function overrides&lt;br /&gt;
 	//{{AFX_VIRTUAL(CAboutDlg)&lt;br /&gt;
 	protected:&lt;br /&gt;
 	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support&lt;br /&gt;
 	//}}AFX_VIRTUAL&lt;br /&gt;
 &lt;br /&gt;
 // Implementation&lt;br /&gt;
 protected:&lt;br /&gt;
 	//{{AFX_MSG(CAboutDlg)&lt;br /&gt;
 		// No message handlers&lt;br /&gt;
 	//}}AFX_MSG&lt;br /&gt;
 	DECLARE_MESSAGE_MAP()&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)&lt;br /&gt;
 {&lt;br /&gt;
 	//{{AFX_DATA_INIT(CAboutDlg)&lt;br /&gt;
 	//}}AFX_DATA_INIT&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void CAboutDlg::DoDataExchange(CDataExchange* pDX)&lt;br /&gt;
 {&lt;br /&gt;
 	CDialog::DoDataExchange(pDX);&lt;br /&gt;
 	//{{AFX_DATA_MAP(CAboutDlg)&lt;br /&gt;
 	//}}AFX_DATA_MAP&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)&lt;br /&gt;
 	//{{AFX_MSG_MAP(CAboutDlg)&lt;br /&gt;
 		// No message handlers&lt;br /&gt;
 	//}}AFX_MSG_MAP&lt;br /&gt;
 END_MESSAGE_MAP()&lt;br /&gt;
 &lt;br /&gt;
 // App command to run the dialog&lt;br /&gt;
 void CEx14App::OnAppAbout()&lt;br /&gt;
 {&lt;br /&gt;
 	CAboutDlg aboutDlg;&lt;br /&gt;
 	aboutDlg.DoModal();&lt;br /&gt;
 }&lt;br /&gt;
 작게는 CAboutDlg 도 상기의 조건에 맞추어져서 정의되어 있음을 알 수 있다.&lt;br /&gt;
&lt;br /&gt;
= 메시지의 종류 =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| window message&lt;br /&gt;
| WM_PAINT, WM_LBUTTONUP과 같은 표준 윈도우 메시지.&lt;br /&gt;
|-&lt;br /&gt;
| control notification message&lt;br /&gt;
| 컨트롤 폼과 같은 것으로 부터 부모 윈도우에게 전달되는 WM_COMMAND메시지이다.&lt;br /&gt;
|-&lt;br /&gt;
| command message&lt;br /&gt;
| 메뉴, 툴바와 같은 UI요소에서 오는 WM_COMMAND 메시지&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= 메시지의 처리 순서 =&lt;br /&gt;
MFC에서는 기본적으로 메시지가 전달되는 특정 순서에 따라서 메시지가 처리되고 처리 코드가 업을 결우 다음 순서의 클래스에서 그 메시지를 처리한다. 결국 그 메시지를 처리하는 코드가 없다면 메시지는 윈도우로 넘겨지고 폐기처리된다.&lt;br /&gt;
물론 메시지의 전달 순서를 변경하는 것도 가능하다.&lt;br /&gt;
 == SDI Application ==&lt;br /&gt;
* view object(menu object)&lt;br /&gt;
* document object&lt;br /&gt;
* document template object&lt;br /&gt;
* main frame window object&lt;br /&gt;
* application object&lt;br /&gt;
&lt;br /&gt;
 == MDI Application ==&lt;br /&gt;
* view object (activated)&lt;br /&gt;
* document object (linked with view activated)&lt;br /&gt;
* document template object (linked with document activated)&lt;br /&gt;
* frame windows object (linked with view activate)&lt;br /&gt;
* application object&lt;br /&gt;
	&lt;br /&gt;
= Message Identifier Symbol =&lt;br /&gt;
 WM_COMMAND이외에도 윈도우에는 다양한 식별 심볼들이 있다. 이는 다음과 같다.&lt;br /&gt;
 그냥 참고로 이런 파일이 있다는 사실정도는 알아두자.&lt;br /&gt;
 in &amp;#039;&amp;#039;winuser.h&amp;#039;&amp;#039;&lt;br /&gt;
 /*&lt;br /&gt;
  * Window Messages&lt;br /&gt;
  */&lt;br /&gt;
 &lt;br /&gt;
 #define WM_NULL                         0x0000&lt;br /&gt;
 #define WM_CREATE                       0x0001&lt;br /&gt;
 #define WM_DESTROY                      0x0002&lt;br /&gt;
 #define WM_MOVE                         0x0003&lt;br /&gt;
 #define WM_SIZE                         0x0005&lt;br /&gt;
 &lt;br /&gt;
 #define WM_ACTIVATE                     0x0006&lt;br /&gt;
 /*&lt;br /&gt;
  * WM_ACTIVATE state values&lt;br /&gt;
  */&lt;br /&gt;
 #define     WA_INACTIVE     0&lt;br /&gt;
 #define     WA_ACTIVE       1&lt;br /&gt;
 #define     WA_CLICKACTIVE  2&lt;br /&gt;
 &lt;br /&gt;
 #define WM_SETFOCUS                     0x0007&lt;br /&gt;
 #define WM_KILLFOCUS                    0x0008&lt;br /&gt;
 #define WM_ENABLE                       0x000A&lt;br /&gt;
 #define WM_SETREDRAW                    0x000B&lt;br /&gt;
 #define WM_SETTEXT                      0x000C&lt;br /&gt;
 #define WM_GETTEXT                      0x000D&lt;br /&gt;
 #define WM_GETTEXTLENGTH                0x000E&lt;br /&gt;
 #define WM_PAINT                        0x000F&lt;br /&gt;
 #define WM_CLOSE                        0x0010&lt;br /&gt;
 #define WM_QUERYENDSESSION              0x0011&lt;br /&gt;
 #define WM_QUIT                         0x0012&lt;br /&gt;
 #define WM_QUERYOPEN                    0x0013&lt;br /&gt;
 #define WM_ERASEBKGND                   0x0014&lt;br /&gt;
 #define WM_SYSCOLORCHANGE               0x0015&lt;br /&gt;
 #define WM_ENDSESSION                   0x0016&lt;br /&gt;
 #define WM_SHOWWINDOW                   0x0018&lt;br /&gt;
 #define WM_WININICHANGE                 0x001A&lt;br /&gt;
 #if(WINVER &amp;amp;gt;= 0x0400)&lt;br /&gt;
 #define WM_SETTINGCHANGE                WM_WININICHANGE&lt;br /&gt;
 #endif /* WINVER &amp;amp;gt;= 0x0400 */&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define WM_DEVMODECHANGE                0x001B&lt;br /&gt;
 #define WM_ACTIVATEAPP                  0x001C&lt;br /&gt;
 #define WM_FONTCHANGE                   0x001D&lt;br /&gt;
 #define WM_TIMECHANGE                   0x001E&lt;br /&gt;
 #define WM_CANCELMODE                   0x001F&lt;br /&gt;
 #define WM_SETCURSOR                    0x0020&lt;br /&gt;
 #define WM_MOUSEACTIVATE                0x0021&lt;br /&gt;
 #define WM_CHILDACTIVATE                0x0022&lt;br /&gt;
 #define WM_QUEUESYNC                    0x0023&lt;br /&gt;
 &lt;br /&gt;
 #define WM_GETMINMAXINFO                0x0024&lt;br /&gt;
 // end_r_winuser&lt;br /&gt;
 /*&lt;br /&gt;
  * Struct pointed to by WM_GETMINMAXINFO lParam&lt;br /&gt;
  */&lt;br /&gt;
 typedef struct tagMINMAXINFO {&lt;br /&gt;
     POINT ptReserved;&lt;br /&gt;
     POINT ptMaxSize;&lt;br /&gt;
     POINT ptMaxPosition;&lt;br /&gt;
     POINT ptMinTrackSize;&lt;br /&gt;
     POINT ptMaxTrackSize;&lt;br /&gt;
 } MINMAXINFO, *PMINMAXINFO, *LPMINMAXINFO;&lt;br /&gt;
 &lt;br /&gt;
 // begin_r_winuser&lt;br /&gt;
 #define WM_PAINTICON                    0x0026&lt;br /&gt;
 #define WM_ICONERASEBKGND               0x0027&lt;br /&gt;
 #define WM_NEXTDLGCTL                   0x0028&lt;br /&gt;
 #define WM_SPOOLERSTATUS                0x002A&lt;br /&gt;
 #define WM_DRAWITEM                     0x002B&lt;br /&gt;
 #define WM_MEASUREITEM                  0x002C&lt;br /&gt;
 #define WM_DELETEITEM                   0x002D&lt;br /&gt;
 #define WM_VKEYTOITEM                   0x002E&lt;br /&gt;
 #define WM_CHARTOITEM                   0x002F&lt;br /&gt;
 #define WM_SETFONT                      0x0030&lt;br /&gt;
 #define WM_GETFONT                      0x0031&lt;br /&gt;
 #define WM_SETHOTKEY                    0x0032&lt;br /&gt;
 #define WM_GETHOTKEY                    0x0033&lt;br /&gt;
 #define WM_QUERYDRAGICON                0x0037&lt;br /&gt;
 #define WM_COMPAREITEM                  0x0039&lt;br /&gt;
 #if(WINVER &amp;amp;gt;= 0x0500)&lt;br /&gt;
 #define WM_GETOBJECT                    0x003D&lt;br /&gt;
 #endif /* WINVER &amp;amp;gt;= 0x0500 */&lt;br /&gt;
 #define WM_COMPACTING                   0x0041&lt;br /&gt;
 #define WM_COMMNOTIFY                   0x0044  /* no longer suported */&lt;br /&gt;
 #define WM_WINDOWPOSCHANGING            0x0046&lt;br /&gt;
 #define WM_WINDOWPOSCHANGED             0x0047&lt;br /&gt;
 &lt;br /&gt;
 #define WM_POWER                        0x0048&lt;br /&gt;
 /*&lt;br /&gt;
  * wParam for WM_POWER window message and DRV_POWER driver notification&lt;br /&gt;
  */&lt;br /&gt;
 #define PWR_OK              1&lt;br /&gt;
 #define PWR_FAIL            (-1)&lt;br /&gt;
 #define PWR_SUSPENDREQUEST  1&lt;br /&gt;
 #define PWR_SUSPENDRESUME   2&lt;br /&gt;
 #define PWR_CRITICALRESUME  3&lt;br /&gt;
 &lt;br /&gt;
 #define WM_COPYDATA                     0x004A&lt;br /&gt;
 #define WM_CANCELJOURNAL                0x004B&lt;br /&gt;
 &lt;br /&gt;
 // end_r_winuser&lt;br /&gt;
 &lt;br /&gt;
 /*&lt;br /&gt;
  * lParam of WM_COPYDATA message points to...&lt;br /&gt;
  */&lt;br /&gt;
 typedef struct tagCOPYDATASTRUCT {&lt;br /&gt;
     DWORD dwData;&lt;br /&gt;
     DWORD cbData;&lt;br /&gt;
     PVOID lpData;&lt;br /&gt;
 } COPYDATASTRUCT, *PCOPYDATASTRUCT;&lt;br /&gt;
 &lt;br /&gt;
 // begin_r_winuser&lt;br /&gt;
 &lt;br /&gt;
 #if(WINVER &amp;amp;gt;= 0x0400)&lt;br /&gt;
 #define WM_NOTIFY                       0x004E&lt;br /&gt;
 #define WM_INPUTLANGCHANGEREQUEST       0x0050&lt;br /&gt;
 #define WM_INPUTLANGCHANGE              0x0051&lt;br /&gt;
 #define WM_TCARD                        0x0052&lt;br /&gt;
 #define WM_HELP                         0x0053&lt;br /&gt;
 #define WM_USERCHANGED                  0x0054&lt;br /&gt;
 #define WM_NOTIFYFORMAT                 0x0055&lt;br /&gt;
 &lt;br /&gt;
 #define NFR_ANSI                             1&lt;br /&gt;
 #define NFR_UNICODE                          2&lt;br /&gt;
 #define NF_QUERY                             3&lt;br /&gt;
 #define NF_REQUERY                           4&lt;br /&gt;
 &lt;br /&gt;
 #define WM_CONTEXTMENU                  0x007B&lt;br /&gt;
 #define WM_STYLECHANGING                0x007C&lt;br /&gt;
 #define WM_STYLECHANGED                 0x007D&lt;br /&gt;
 #define WM_DISPLAYCHANGE                0x007E&lt;br /&gt;
 #define WM_GETICON                      0x007F&lt;br /&gt;
 #define WM_SETICON                      0x0080&lt;br /&gt;
 #endif /* WINVER &amp;amp;gt;= 0x0400 */&lt;br /&gt;
 &lt;br /&gt;
 #define WM_NCCREATE                     0x0081&lt;br /&gt;
 #define WM_NCDESTROY                    0x0082&lt;br /&gt;
 #define WM_NCCALCSIZE                   0x0083&lt;br /&gt;
 #define WM_NCHITTEST                    0x0084&lt;br /&gt;
 #define WM_NCPAINT                      0x0085&lt;br /&gt;
 #define WM_NCACTIVATE                   0x0086&lt;br /&gt;
 #define WM_GETDLGCODE                   0x0087&lt;br /&gt;
 #define WM_SYNCPAINT                    0x0088&lt;br /&gt;
 #define WM_NCMOUSEMOVE                  0x00A0&lt;br /&gt;
 #define WM_NCLBUTTONDOWN                0x00A1&lt;br /&gt;
 #define WM_NCLBUTTONUP                  0x00A2&lt;br /&gt;
 #define WM_NCLBUTTONDBLCLK              0x00A3&lt;br /&gt;
 #define WM_NCRBUTTONDOWN                0x00A4&lt;br /&gt;
 #define WM_NCRBUTTONUP                  0x00A5&lt;br /&gt;
 #define WM_NCRBUTTONDBLCLK              0x00A6&lt;br /&gt;
 #define WM_NCMBUTTONDOWN                0x00A7&lt;br /&gt;
 #define WM_NCMBUTTONUP                  0x00A8&lt;br /&gt;
 #define WM_NCMBUTTONDBLCLK              0x00A9&lt;br /&gt;
 &lt;br /&gt;
 #define WM_KEYFIRST                     0x0100&lt;br /&gt;
 #define WM_KEYDOWN                      0x0100&lt;br /&gt;
 #define WM_KEYUP                        0x0101&lt;br /&gt;
 #define WM_CHAR                         0x0102&lt;br /&gt;
 #define WM_DEADCHAR                     0x0103&lt;br /&gt;
 #define WM_SYSKEYDOWN                   0x0104&lt;br /&gt;
 #define WM_SYSKEYUP                     0x0105&lt;br /&gt;
 #define WM_SYSCHAR                      0x0106&lt;br /&gt;
 #define WM_SYSDEADCHAR                  0x0107&lt;br /&gt;
 #define WM_KEYLAST                      0x0108&lt;br /&gt;
 &lt;br /&gt;
 #if(WINVER &amp;amp;gt;= 0x0400)&lt;br /&gt;
 #define WM_IME_STARTCOMPOSITION         0x010D&lt;br /&gt;
 #define WM_IME_ENDCOMPOSITION           0x010E&lt;br /&gt;
 #define WM_IME_COMPOSITION              0x010F&lt;br /&gt;
 #define WM_IME_KEYLAST                  0x010F&lt;br /&gt;
 #endif /* WINVER &amp;amp;gt;= 0x0400 */&lt;br /&gt;
 &lt;br /&gt;
 #define WM_INITDIALOG                   0x0110&lt;br /&gt;
 #define WM_COMMAND                      0x0111&lt;br /&gt;
 #define WM_SYSCOMMAND                   0x0112&lt;br /&gt;
 #define WM_TIMER                        0x0113&lt;br /&gt;
 #define WM_HSCROLL                      0x0114&lt;br /&gt;
 #define WM_VSCROLL                      0x0115&lt;br /&gt;
 #define WM_INITMENU                     0x0116&lt;br /&gt;
 #define WM_INITMENUPOPUP                0x0117&lt;br /&gt;
 #define WM_MENUSELECT                   0x011F&lt;br /&gt;
 #define WM_MENUCHAR                     0x0120&lt;br /&gt;
 #define WM_ENTERIDLE                    0x0121&lt;br /&gt;
 #if(WINVER &amp;amp;gt;= 0x0500)&lt;br /&gt;
 #define WM_MENURBUTTONUP                0x0122&lt;br /&gt;
 #define WM_MENUDRAG                     0x0123&lt;br /&gt;
 #define WM_MENUGETOBJECT                0x0124&lt;br /&gt;
 #define WM_UNINITMENUPOPUP              0x0125&lt;br /&gt;
 #define WM_MENUCOMMAND                  0x0126&lt;br /&gt;
 #endif /* WINVER &amp;amp;gt;= 0x0500 */&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define WM_CTLCOLORMSGBOX               0x0132&lt;br /&gt;
 #define WM_CTLCOLOREDIT                 0x0133&lt;br /&gt;
 #define WM_CTLCOLORLISTBOX              0x0134&lt;br /&gt;
 #define WM_CTLCOLORBTN                  0x0135&lt;br /&gt;
 #define WM_CTLCOLORDLG                  0x0136&lt;br /&gt;
 #define WM_CTLCOLORSCROLLBAR            0x0137&lt;br /&gt;
 #define WM_CTLCOLORSTATIC               0x0138&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define WM_MOUSEFIRST                   0x0200&lt;br /&gt;
 #define WM_MOUSEMOVE                    0x0200&lt;br /&gt;
 #define WM_LBUTTONDOWN                  0x0201&lt;br /&gt;
 #define WM_LBUTTONUP                    0x0202&lt;br /&gt;
 #define WM_LBUTTONDBLCLK                0x0203&lt;br /&gt;
 #define WM_RBUTTONDOWN                  0x0204&lt;br /&gt;
 #define WM_RBUTTONUP                    0x0205&lt;br /&gt;
 #define WM_RBUTTONDBLCLK                0x0206&lt;br /&gt;
 #define WM_MBUTTONDOWN                  0x0207&lt;br /&gt;
 #define WM_MBUTTONUP                    0x0208&lt;br /&gt;
 #define WM_MBUTTONDBLCLK                0x0209&lt;br /&gt;
 &lt;br /&gt;
 #if (_WIN32_WINNT &amp;amp;gt;= 0x0400) || (_WIN32_WINDOWS &amp;amp;gt; 0x0400)&lt;br /&gt;
 #define WM_MOUSEWHEEL                   0x020A&lt;br /&gt;
 #define WM_MOUSELAST                    0x020A&lt;br /&gt;
 #else&lt;br /&gt;
 #define WM_MOUSELAST                    0x0209&lt;br /&gt;
 #endif /* if (_WIN32_WINNT &amp;amp;lt; 0x0400) */&lt;br /&gt;
 &lt;br /&gt;
 #if(_WIN32_WINNT &amp;amp;gt;= 0x0400)&lt;br /&gt;
 #define WHEEL_DELTA                     120     /* Value for rolling one detent */&lt;br /&gt;
 #endif /* _WIN32_WINNT &amp;amp;gt;= 0x0400 */&lt;br /&gt;
 #if(_WIN32_WINNT &amp;amp;gt;= 0x0400)&lt;br /&gt;
 #define WHEEL_PAGESCROLL                (UINT_MAX) /* Scroll one page */&lt;br /&gt;
 #endif /* _WIN32_WINNT &amp;amp;gt;= 0x0400 */&lt;br /&gt;
 &lt;br /&gt;
 #define WM_PARENTNOTIFY                 0x0210&lt;br /&gt;
 #define WM_ENTERMENULOOP                0x0211&lt;br /&gt;
 #define WM_EXITMENULOOP                 0x0212&lt;br /&gt;
 &lt;br /&gt;
 #if(WINVER &amp;amp;gt;= 0x0400)&lt;br /&gt;
 #define WM_NEXTMENU                     0x0213&lt;br /&gt;
 // end_r_winuser&lt;br /&gt;
 &lt;br /&gt;
 typedef struct tagMDINEXTMENU&lt;br /&gt;
 {&lt;br /&gt;
     HMENU   hmenuIn;&lt;br /&gt;
     HMENU   hmenuNext;&lt;br /&gt;
     HWND    hwndNext;&lt;br /&gt;
 } MDINEXTMENU, * PMDINEXTMENU, FAR * LPMDINEXTMENU;&lt;br /&gt;
 &lt;br /&gt;
 // begin_r_winuser&lt;br /&gt;
 #define WM_SIZING                       0x0214&lt;br /&gt;
 #define WM_CAPTURECHANGED               0x0215&lt;br /&gt;
 #define WM_MOVING                       0x0216&lt;br /&gt;
 // end_r_winuser&lt;br /&gt;
 #define WM_POWERBROADCAST               0x0218      // r_winuser pbt&lt;br /&gt;
 // begin_pbt&lt;br /&gt;
 &lt;br /&gt;
 #define PBT_APMQUERYSUSPEND             0x0000&lt;br /&gt;
 #define PBT_APMQUERYSTANDBY             0x0001&lt;br /&gt;
 &lt;br /&gt;
 #define PBT_APMQUERYSUSPENDFAILED       0x0002&lt;br /&gt;
 #define PBT_APMQUERYSTANDBYFAILED       0x0003&lt;br /&gt;
 &lt;br /&gt;
 #define PBT_APMSUSPEND                  0x0004&lt;br /&gt;
 #define PBT_APMSTANDBY                  0x0005&lt;br /&gt;
 &lt;br /&gt;
 #define PBT_APMRESUMECRITICAL           0x0006&lt;br /&gt;
 #define PBT_APMRESUMESUSPEND            0x0007&lt;br /&gt;
 #define PBT_APMRESUMESTANDBY            0x0008&lt;br /&gt;
 &lt;br /&gt;
 #define PBTF_APMRESUMEFROMFAILURE       0x00000001&lt;br /&gt;
 &lt;br /&gt;
 #define PBT_APMBATTERYLOW               0x0009&lt;br /&gt;
 #define PBT_APMPOWERSTATUSCHANGE        0x000A&lt;br /&gt;
 &lt;br /&gt;
 #define PBT_APMOEMEVENT                 0x000B&lt;br /&gt;
 #define PBT_APMRESUMEAUTOMATIC          0x0012&lt;br /&gt;
 // end_pbt&lt;br /&gt;
 &lt;br /&gt;
 // begin_r_winuser&lt;br /&gt;
 #define WM_DEVICECHANGE                 0x0219&lt;br /&gt;
 &lt;br /&gt;
 #endif /* WINVER &amp;amp;gt;= 0x0400 */&lt;br /&gt;
 &lt;br /&gt;
 #define WM_MDICREATE                    0x0220&lt;br /&gt;
 #define WM_MDIDESTROY                   0x0221&lt;br /&gt;
 #define WM_MDIACTIVATE                  0x0222&lt;br /&gt;
 #define WM_MDIRESTORE                   0x0223&lt;br /&gt;
 #define WM_MDINEXT                      0x0224&lt;br /&gt;
 #define WM_MDIMAXIMIZE                  0x0225&lt;br /&gt;
 #define WM_MDITILE                      0x0226&lt;br /&gt;
 #define WM_MDICASCADE                   0x0227&lt;br /&gt;
 #define WM_MDIICONARRANGE               0x0228&lt;br /&gt;
 #define WM_MDIGETACTIVE                 0x0229&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #define WM_MDISETMENU                   0x0230&lt;br /&gt;
 #define WM_ENTERSIZEMOVE                0x0231&lt;br /&gt;
 #define WM_EXITSIZEMOVE                 0x0232&lt;br /&gt;
 #define WM_DROPFILES                    0x0233&lt;br /&gt;
 #define WM_MDIREFRESHMENU               0x0234&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #if(WINVER &amp;amp;gt;= 0x0400)&lt;br /&gt;
 #define WM_IME_SETCONTEXT               0x0281&lt;br /&gt;
 #define WM_IME_NOTIFY                   0x0282&lt;br /&gt;
 #define WM_IME_CONTROL                  0x0283&lt;br /&gt;
 #define WM_IME_COMPOSITIONFULL          0x0284&lt;br /&gt;
 #define WM_IME_SELECT                   0x0285&lt;br /&gt;
 #define WM_IME_CHAR                     0x0286&lt;br /&gt;
 #endif /* WINVER &amp;amp;gt;= 0x0400 */&lt;br /&gt;
 #if(WINVER &amp;amp;gt;= 0x0500)&lt;br /&gt;
 #define WM_IME_REQUEST                  0x0288&lt;br /&gt;
 #endif /* WINVER &amp;amp;gt;= 0x0500 */&lt;br /&gt;
 #if(WINVER &amp;amp;gt;= 0x0400)&lt;br /&gt;
 #define WM_IME_KEYDOWN                  0x0290&lt;br /&gt;
 #define WM_IME_KEYUP                    0x0291&lt;br /&gt;
 #endif /* WINVER &amp;amp;gt;= 0x0400 */&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #if(_WIN32_WINNT &amp;amp;gt;= 0x0400)&lt;br /&gt;
 #define WM_MOUSEHOVER                   0x02A1&lt;br /&gt;
 #define WM_MOUSELEAVE                   0x02A3&lt;br /&gt;
 #endif /* _WIN32_WINNT &amp;amp;gt;= 0x0400 */&lt;br /&gt;
 &lt;br /&gt;
 #define WM_CUT                          0x0300&lt;br /&gt;
 #define WM_COPY                         0x0301&lt;br /&gt;
 #define WM_PASTE                        0x0302&lt;br /&gt;
 #define WM_CLEAR                        0x0303&lt;br /&gt;
 #define WM_UNDO                         0x0304&lt;br /&gt;
 #define WM_RENDERFORMAT                 0x0305&lt;br /&gt;
 #define WM_RENDERALLFORMATS             0x0306&lt;br /&gt;
 #define WM_DESTROYCLIPBOARD             0x0307&lt;br /&gt;
 #define WM_DRAWCLIPBOARD                0x0308&lt;br /&gt;
 #define WM_PAINTCLIPBOARD               0x0309&lt;br /&gt;
 #define WM_VSCROLLCLIPBOARD             0x030A&lt;br /&gt;
 #define WM_SIZECLIPBOARD                0x030B&lt;br /&gt;
 #define WM_ASKCBFORMATNAME              0x030C&lt;br /&gt;
 #define WM_CHANGECBCHAIN                0x030D&lt;br /&gt;
 #define WM_HSCROLLCLIPBOARD             0x030E&lt;br /&gt;
 #define WM_QUERYNEWPALETTE              0x030F&lt;br /&gt;
 #define WM_PALETTEISCHANGING            0x0310&lt;br /&gt;
 #define WM_PALETTECHANGED               0x0311&lt;br /&gt;
 #define WM_HOTKEY                       0x0312&lt;br /&gt;
 &lt;br /&gt;
 #if(WINVER &amp;amp;gt;= 0x0400)&lt;br /&gt;
 #define WM_PRINT                        0x0317&lt;br /&gt;
 #define WM_PRINTCLIENT                  0x0318&lt;br /&gt;
 &lt;br /&gt;
 #define WM_HANDHELDFIRST                0x0358&lt;br /&gt;
 #define WM_HANDHELDLAST                 0x035F&lt;br /&gt;
 &lt;br /&gt;
 #define WM_AFXFIRST                     0x0360&lt;br /&gt;
 #define WM_AFXLAST                      0x037F&lt;br /&gt;
 #endif /* WINVER &amp;amp;gt;= 0x0400 */&lt;br /&gt;
 &lt;br /&gt;
 #define WM_PENWINFIRST                  0x0380&lt;br /&gt;
 #define WM_PENWINLAST                   0x038F&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 #if(WINVER &amp;amp;gt;= 0x0400)&lt;br /&gt;
 #define WM_APP                          0x8000&lt;br /&gt;
 #endif /* WINVER &amp;amp;gt;= 0x0400 */&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 /*&lt;br /&gt;
  * NOTE: All Message Numbers below 0x0400 are RESERVED.&lt;br /&gt;
  *&lt;br /&gt;
  * Private Window Messages Start Here:&lt;br /&gt;
  */&lt;br /&gt;
 #define WM_USER                         0x0400&lt;br /&gt;
 &lt;br /&gt;
 #if(WINVER &amp;amp;gt;= 0x0400)&lt;br /&gt;
 &lt;br /&gt;
 /*  wParam for WM_SIZING message  */&lt;br /&gt;
 #define WMSZ_LEFT           1&lt;br /&gt;
 #define WMSZ_RIGHT          2&lt;br /&gt;
 #define WMSZ_TOP            3&lt;br /&gt;
 #define WMSZ_TOPLEFT        4&lt;br /&gt;
 #define WMSZ_TOPRIGHT       5&lt;br /&gt;
 #define WMSZ_BOTTOM         6&lt;br /&gt;
 #define WMSZ_BOTTOMLEFT     7&lt;br /&gt;
 #define WMSZ_BOTTOMRIGHT    8&lt;br /&gt;
 #endif /* WINVER &amp;amp;gt;= 0x0400 */&lt;br /&gt;
 &lt;br /&gt;
 #ifndef NONCMESSAGES&lt;br /&gt;
----&lt;br /&gt;
[[MFC]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>