<html>

<head><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- MyFirstUnitAd -->
<ins class="adsbygoogle"
     style="display:inline-block;width:970px;height:250px"
     data-ad-client="ca-pub-5778386704669218"
     data-ad-slot="1503492166"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>

<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 6.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>A life of windows message</title>
<style>
<!--
	table td.head{ 
		background-color: #3a6ba5;
		border: 1px #000000 solid;
		font-family: Verdana;
		font-weight: bold;
		font-size: 14px;
		color: #f79c19;
		padding: 6px;
	}

	table td.body{ 
		border-bottom: 1px #6699CC dotted;
		text-align: left;
		font-family: Verdana, sans-serif, Arial;
		font-weight: normal;
		font-size: 14px;
		color: #3A6BA5;
		background-color: #fafafa;
		padding: 6px;
	}
	
-->
</style>
</head>

<body>



<p align="left"><font size="6" color="#FF0000"><span lang="en-ca"><b>&nbsp; 
 
</b></span><b>&nbsp;&nbsp;&nbsp; <span lang="en-ca">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
The Basic </span></b></font>
<span lang="en-ca"><font size="6" color="#FF0000"><b>Windows Message (The Old New 
Story)</b></font></span></p>

<div align="left">
  <pre><b><font color="#ff0000" size="5">A. <span lang="en-ca">First </span>Edition</font></b></pre>
</div>
<div align="left">
	<pre><span lang="en-ca"><b>This is just a little practice and I am bit embarrassed when I made some low level mistakes. However, I don't think the </b></span></pre>
</div>
<div align="left">
	<pre><span lang="en-ca"><b>comment is fair enough!
</b></span></pre>
</div>
<div align="left">
  <pre><b><font color="#ff0000" size="5"><span lang="en-ca">B</span>.<span lang="en-ca"><a name="problem"></a>The problem</span></font></b></pre>
	<p>
    
  <span lang="en-ca"><font size="2"><b>The problem starts like this. In the 
	simplest &quot;hello-world&quot; windows creation program, I forget to return the &quot;DefWindowProc&quot;. 
	And it takes me hours to debug and still have no clue why &quot;CreateWindow&quot; 
	fails. W gives me some intolerable comments when he pointed out my mistake. 
	But he doesn't really understand the real reason behind this.</b></font></span></p>
	<p>
    
  <span lang="en-ca"><font size="2"><b>Usually when you setup a callback 
	function, you don't really need to guarantee it works because it is just a 
	pointer and </b></font></span></p>
	<p>
    
  <span lang="en-ca"><font size="2"><b>only fails when the program runs. 
	However, &quot;CreateWindow&quot; does more than what I expect. It deliberately asks 
	you to handle</b></font></span></p>
	<p>
    
  <span lang="en-ca"><font size="2"><b>at least some basic message. i.e. If you 
	don't return TRUE for message &quot;WM_NCCREATE&quot;, &quot;CreateWindow&quot; will fail. And 
	this</b></font></span></p>
	<p>
    
  <span lang="en-ca"><font size="2"><b>is the reason when you don't use &quot;DefWindowProc&quot; 
	and fail to create window because in many other message handling you need</b></font></span></p>
	<p>
    
  <span lang="en-ca"><font size="2"><b>to return 0 instead of 1.</b></font></span></p>
	<p>
    
  <b><font color="#ff0000" size="5"><span lang="en-ca"><a name="explain"></a>C</span>.<span lang="en-ca">The
  </span></font></b><span lang="en-ca"><font size="5" color="#FF0000"><b>idea of 
  program</b></font></span></p>
	<p><span lang="en-ca"><font size="2"><b>First I trace to write down all 
	possible message in a file and then try to figure out what is the minimum 
	message needed</b></font></span></p>
	<p><span lang="en-ca"><font size="2"><b>to be processed by &quot;DefWindowProc&quot;. 
	This is really a boring job and that is why this simple program is 
	worthwhile to be </b></font></span></p>
	<p><span lang="en-ca"><font size="2"><b>posted because you have to 
	copy&amp;paste for nearly one hundred message cases.&nbsp;</b></font></span></div>
<pre><b><font color="#ff0000" size="5">D.<span lang="en-ca"><a name="Method"></a>The </span>major functions</font></b></pre>
<div align="left">
  <pre>　</pre>
</div>
<div align="left">
  <pre><b><font color="#ff0000" size="5"><span lang="en-ca">E</span>.</font></b><span lang="en-ca"><font size="5" color="#FF0000"><b>Further improvement</b></font></span></pre>
</div>
<div align="left">
  <div align="left">
  <pre><span lang="en-ca"><b>I finally pinpoint all fundamental messages and it is quite worthwhile for a whole evening work!</b></span></pre>
</div>
	<pre>　</pre>
</div>
<div align="left">
  <pre><b><font color="#ff0000" size="5"><span lang="en-ca">F</span>.</font></b><span lang="en-ca"><font size="5" color="#FF0000"><b>File listing</b></font></span></pre>
</div>
<div align="left">
  <pre><span lang="en-ca"><font size="3" color="#FF0000"><b>1. myWin.cpp </b></font></span></pre>
</div>
<div align="left">
  <pre>　</pre>
</div>
<div align="left">
  <pre><span lang="en-ca"><font size="3" color="#FF0000"><b>file name: myWin.cpp</b></font></span></pre>
</div>
<pre>#include &lt;windows.h&gt;
#include &lt;stdio.h&gt;

WNDCLASS wndClass;
int nWinWidth, nWinHeight;
BYTE count=200;

int counter=0;

FILE* stream;



LRESULT CALLBACK WindowProc
				(HWND hwnd,      // handle to window
				UINT uMsg,      // message identifier
				WPARAM wParam,  // first message parameter
				LPARAM lParam   // second message parameter
				)
{
	//fprintf(stream, &quot;%d:&quot;, counter++);
	switch(uMsg)
	{
		//this is necessary because CreateWindow may fail if not return TRUE
	case WM_NCCREATE:
		fprintf(stream, &quot;WM_NCCREATE&quot;);
		return TRUE;//////////////////
		break;
		//this is necessary because window won't calculate redraw area
	case WM_NCCALCSIZE:
		fprintf(stream, &quot;WM_NCCALCSIZE&quot;);
		return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;

		//this is when window draw title bar
	case WM_NCACTIVATE:
		fprintf(stream, &quot;WM_NCACTIVATE&quot;);
		return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;


		//window paint frame
	case WM_NCPAINT:
		fprintf(stream, &quot;WM_NCPAINT&quot;);
		return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;

		//paint background
	case WM_ERASEBKGND:
		fprintf(stream, &quot;WM_ERASEBKGND&quot;);
		return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;


		//all mouse click event needs this
	case WM_NCHITTEST:
		fprintf(stream, &quot;WM_NCHITTEST&quot;);
		return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;
		//you want to set mouse cursor to arrow instead of &quot;sand&quot;
	case WM_SETCURSOR:
		fprintf(stream, &quot;WM_SETCURSOR&quot;);
		return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;

		//you want mouse be clicked and up
	case WM_NCLBUTTONDOWN:
		fprintf(stream, &quot;WM_NCLBUTTONDOWN&quot;);
		return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;

		//you want system command be carried, like shutdown from &quot;window menu&quot;
	case WM_SYSCOMMAND :
		fprintf(stream, &quot;WM_SYSCOMMAND &quot;);
		//return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;
		//ask you if you want to shut down
	case WM_CLOSE:
		fprintf(stream, &quot;WM_CLOSE&quot;);
		DestroyWindow(hwnd);
		//return DefWindowProc(hwnd, uMsg, wParam, lParam);		
		break;

		//if you don't post quit message, message loop won't end
	case WM_DESTROY:
		fprintf(stream, &quot;WM_DESTROY&quot;);
		PostQuitMessage(0);
		break;


	}

	return 0L;
}









/*
LRESULT CALLBACK WindowProc
				(HWND hwnd,      // handle to window
				UINT uMsg,      // message identifier
				WPARAM wParam,  // first message parameter
				LPARAM lParam   // second message parameter
				)
{
	//fprintf(stream, &quot;%d:&quot;, counter++);
	switch(uMsg)
	{
	case WM_GETMINMAXINFO:
		fprintf(stream, &quot;WM_GETMINMAXINFO&quot;);
		//return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;
	case WM_NCCREATE:
		fprintf(stream, &quot;WM_NCCREATE&quot;);
		return TRUE;//////////////////
		break;
	case WM_NCCALCSIZE:
		fprintf(stream, &quot;WM_NCCALCSIZE&quot;);
		return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;
	case WM_CREATE:
		fprintf(stream, &quot;WM_CREATE&quot;);
		//return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;
	case WM_SHOWWINDOW:
		fprintf(stream, &quot;WM_SHOWWINDOW&quot;);
		//return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;
	case WM_WINDOWPOSCHANGING:
		fprintf(stream, &quot;WM_WINDOWPOSCHANGING&quot;);
		//return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;

	case WM_ACTIVATEAPP:
		fprintf(stream, &quot;WM_ACTIVATEAPP&quot;);
		//return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;
	case WM_NCACTIVATE:
		fprintf(stream, &quot;WM_NCACTIVATE&quot;);
		return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;
	case WM_GETTEXT:
		fprintf(stream, &quot;WM_GETTEXT&quot;);
		//return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;
	case WM_ACTIVATE:
		fprintf(stream, &quot;WM_ACTIVATE&quot;);
		//return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;
	case WM_IME_SETCONTEXT:
		fprintf(stream, &quot;WM_IME_SETCONTEXT&quot;);
		break;
	case WM_IME_NOTIFY:
		fprintf(stream, &quot;WM_IME_NOTIFY&quot;);
		break;
	case WM_SETFOCUS:
		fprintf(stream, &quot;WM_SETFOCUS&quot;);
		break;
	case WM_NCPAINT:
		fprintf(stream, &quot;WM_NCPAINT&quot;);
		return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;

	case WM_ERASEBKGND:
		fprintf(stream, &quot;WM_ERASEBKGND&quot;);
		return DefWindowProc(hwnd, uMsg, wParam, lParam);

		break;
	case WM_WINDOWPOSCHANGED:
		fprintf(stream, &quot;WM_WINDOWPOSCHANGED&quot;);
		//return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;
	case WM_SIZE:
		fprintf(stream, &quot;WM_SIZE&quot;);
		//return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;
	case WM_MOVE:
		fprintf(stream, &quot;WM_MOVE&quot;);
		//return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;
	case WM_PAINT:
		fprintf(stream, &quot;WM_PAINT&quot;);
		break;
	case WM_GETICON:
		fprintf(stream, &quot;WM_GETICON&quot;);
		//return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;


	case WM_KEYUP:
		fprintf(stream, &quot;WM_KEYUP&quot;);
		//return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;
	case WM_NCHITTEST:
		fprintf(stream, &quot;WM_NCHITTEST&quot;);
		return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;
	case WM_SETCURSOR:
		fprintf(stream, &quot;WM_SETCURSOR&quot;);
		return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;
	case EN_KILLFOCUS:
		fprintf(stream, &quot;EN_KILLFOCUS&quot;);
		break;

	case WM_NCMOUSEMOVE:
		fprintf(stream, &quot;WM_NCMOUSEMOVE&quot;);
		break;

	case WM_NCLBUTTONDOWN:
		fprintf(stream, &quot;WM_NCLBUTTONDOWN&quot;);
		return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;
	case WM_CAPTURECHANGED:
		fprintf(stream, &quot;WM_CAPTURECHANGED&quot;);
		break;
	case WM_SYSCOMMAND :
		fprintf(stream, &quot;WM_SYSCOMMAND &quot;);
		return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;
	case WM_CLOSE:
		fprintf(stream, &quot;WM_CLOSE&quot;);
		DestroyWindow(hwnd);
		//return DefWindowProc(hwnd, uMsg, wParam, lParam);		
		break;




	case WM_KILLFOCUS:
		fprintf(stream, &quot;WM_KILLFOCUS&quot;);
		break;


	case WM_DESTROY:
		fprintf(stream, &quot;WM_DESTROY&quot;);
		PostQuitMessage(0);
		break;

	default:
		fprintf(stream, &quot;not listed %d&quot;, uMsg);	
		//return DefWindowProc(hwnd, uMsg, wParam, lParam);
		break;
	}
	fprintf(stream, &quot;\n&quot;);
	return 0L;
}
*/



/*
LRESULT CALLBACK WindowProc
				(HWND hwnd,      // handle to window
				UINT uMsg,      // message identifier
				WPARAM wParam,  // first message parameter
				LPARAM lParam   // second message parameter
				)
{
	//fprintf(stream, &quot;%d:&quot;, counter++);
	switch(uMsg)
	{
	case WM_ACTIVATE:
		fprintf(stream, &quot;WM_ACTIVATE&quot;);
		break;
	case WM_ACTIVATEAPP:
		fprintf(stream, &quot;WM_ACTIVATEAPP&quot;);
		break;
	case WM_CANCELMODE:
		fprintf(stream, &quot;WM_CANCELMODE&quot;);
		break;
	case WM_CHILDACTIVATE:
		fprintf(stream, &quot;WM_CHILDACTIVATE&quot;);
		break;
	case WM_CLOSE:
		fprintf(stream, &quot;WM_CLOSE&quot;);
		break;
	case WM_COMPACTING:
		fprintf(stream, &quot;WM_COMPACTING&quot;);
		break;
	case WM_CREATE:
		fprintf(stream, &quot;WM_CREATE&quot;);
		break;
	case WM_DESTROY:
		fprintf(stream, &quot;WM_DESTROY&quot;);
		PostQuitMessage(0);		
		break;
	case WM_ENABLE:
		fprintf(stream, &quot;WM_ENABLE&quot;);
		break;
	case WM_ENTERSIZEMOVE:
		fprintf(stream, &quot;WM_ENTERSIZEMOVE&quot;);
		break;
	case WM_EXITSIZEMOVE:
		fprintf(stream, &quot;WM_EXITSIZEMOVE&quot;);
		break;
	case WM_GETICON:
		fprintf(stream, &quot;WM_GETICON&quot;);
		break;
	case WM_GETMINMAXINFO:
		fprintf(stream, &quot;WM_GETMINMAXINFO&quot;);
		break;
	case WM_GETTEXT:
		fprintf(stream, &quot;WM_GETTEXT&quot;);
		break;
	case WM_GETTEXTLENGTH:
		fprintf(stream, &quot;WM_GETTEXTLENGTH&quot;);
		break;
	case WM_INPUTLANGCHANGE:
		fprintf(stream, &quot;WM_INPUTLANGCHANGE&quot;);
		break;
	case WM_INPUTLANGCHANGEREQUEST:
		fprintf(stream, &quot;WM_INPUTLANGCHANGEREQUEST&quot;);
		break;
	case WM_MOVE:
		fprintf(stream, &quot;WM_MOVE&quot;);
		break;
	case WM_MOVING:
		fprintf(stream, &quot;WM_MOVING&quot;);
		break;
	case WM_NCACTIVATE:
		fprintf(stream, &quot;WM_NCACTIVATE&quot;);
		break;
	case WM_NCCALCSIZE:
		fprintf(stream, &quot;WM_NCCALCSIZE&quot;);
		break;
	case WM_NCCREATE:
		fprintf(stream, &quot;WM_NCCREATE&quot;);
		//return TRUE;///
		break;
	case WM_NCDESTROY:
		fprintf(stream, &quot;WM_NCDESTROY&quot;);
		break;
	case WM_PARENTNOTIFY:
		fprintf(stream, &quot;WM_PARENTNOTIFY&quot;);
		break;
	case WM_QUERYDRAGICON:
		fprintf(stream, &quot;WM_QUERYDRAGICON&quot;);
		break;
	case WM_QUERYOPEN:
		fprintf(stream, &quot;WM_QUERYOPEN&quot;);
		break;
	case WM_QUIT:
		fprintf(stream, &quot;WM_QUIT&quot;);
		break;
	case WM_SETICON:
		fprintf(stream, &quot;WM_SETICON&quot;);
		break;
	case WM_SETTEXT:
		fprintf(stream, &quot;WM_SETTEXT&quot;);
		break;
	case WM_SHOWWINDOW:
		fprintf(stream, &quot;WM_SHOWWINDOW&quot;);
		break;
	case WM_SIZE:
		fprintf(stream, &quot;WM_SIZE&quot;);
		break;
	case WM_SIZING:
		fprintf(stream, &quot;WM_SIZING&quot;);
		break;
	case WM_STYLECHANGED:
		fprintf(stream, &quot;WM_STYLECHANGED&quot;);
		break;
	case WM_STYLECHANGING:
		fprintf(stream, &quot;WM_STYLECHANGING&quot;);
		break;
	case WM_USERCHANGED:
		fprintf(stream, &quot;WM_USERCHANGED&quot;);
		break;
	case WM_WINDOWPOSCHANGED:
		fprintf(stream, &quot;WM_WINDOWPOSCHANGED&quot;);
		break;
	case WM_WINDOWPOSCHANGING:
		fprintf(stream, &quot;WM_WINDOWPOSCHANGING&quot;);
		break;
	case WM_IME_CHAR:
		fprintf(stream, &quot;WM_IME_CHAR&quot;);
		break;
	case WM_IME_COMPOSITION:
		fprintf(stream, &quot;WM_IME_COMPOSITION&quot;);
		break;
	case WM_IME_COMPOSITIONFULL:
		fprintf(stream, &quot;WM_IME_COMPOSITIONFULL&quot;);
		break;
	case WM_IME_CONTROL:
		fprintf(stream, &quot;WM_IME_CONTROL&quot;);
		break;
	case WM_IME_ENDCOMPOSITION:
		fprintf(stream, &quot;WM_IME_ENDCOMPOSITION&quot;);
		break;
	case WM_IME_KEYDOWN:
		fprintf(stream, &quot;WM_IME_KEYDOWN&quot;);
		break;
	case WM_IME_KEYUP:
		fprintf(stream, &quot;WM_IME_KEYUP&quot;);
		break;
	case WM_IME_NOTIFY:
		fprintf(stream, &quot;WM_IME_NOTIFY&quot;);
		break;
		//win2k msg
//	case WM_IME_REQUEST:
//		fprintf(stream, &quot;WM_IME_REQUEST&quot;);
//		break;
	case WM_IME_SELECT:
		fprintf(stream, &quot;WM_IME_SELECT&quot;);
		break;
	case WM_IME_SETCONTEXT:
		fprintf(stream, &quot;WM_IME_SETCONTEXT&quot;);
		break;
	case WM_IME_STARTCOMPOSITION:
		fprintf(stream, &quot;WM_IME_STARTCOMPOSITION&quot;);
		break;
	case  WM_POWERBROADCAST:
		fprintf(stream, &quot;WM_POWERBROADCAST&quot;);
		break;
	case WM_DEVICECHANGE:
		fprintf(stream, &quot;WM_DEVICECHANGE&quot;);
		break;
	case WM_MDIACTIVATE:
		fprintf(stream, &quot;WM_MDIACTIVATE&quot;);
		break;
	case WM_MDICASCADE:
		fprintf(stream, &quot;WM_MDICASCADE&quot;);
		break;
	case WM_MDICREATE:
		fprintf(stream, &quot;WM_MDICREATE&quot;);
		break;
	case WM_MDIDESTROY:
		fprintf(stream, &quot;WM_MDIDESTROY&quot;);
		break;
	case WM_MDIGETACTIVE:
		fprintf(stream, &quot;WM_MDIGETACTIVE&quot;);
		break;
	case WM_MDIICONARRANGE:
		fprintf(stream, &quot;WM_MDIICONARRANGE&quot;);
		break;
	case WM_MDIMAXIMIZE:
		fprintf(stream, &quot;WM_MDIMAXIMIZE&quot;);
		break;
	case WM_MDINEXT:
		fprintf(stream, &quot;WM_MDINEXT&quot;);
		break;
	case WM_MDIREFRESHMENU:
		fprintf(stream, &quot;WM_MDIREFRESHMENU&quot;);
		break;
	case WM_MDIRESTORE:
		fprintf(stream, &quot;WM_MDIRESTORE&quot;);
		break;
	case WM_MDISETMENU:
		fprintf(stream, &quot;WM_MDISETMENU&quot;);
		break;
	case WM_MDITILE:
		fprintf(stream, &quot;WM_MDITILE&quot;);
		break;
	case EM_CANUNDO:
		fprintf(stream, &quot;EM_CANUNDO&quot;);
		break;
	case EM_CHARFROMPOS:
		fprintf(stream, &quot;EM_CHARFROMPOS&quot;);
		break;
	case EM_EMPTYUNDOBUFFER:
		fprintf(stream, &quot;EM_EMPTYUNDOBUFFER&quot;);
		break;
	case EM_FMTLINES:
		fprintf(stream, &quot;EM_FMTLINES&quot;);
		break;
	case EM_GETFIRSTVISIBLELINE:
		fprintf(stream, &quot;EM_GETFIRSTVISIBLELINE&quot;);
		break;
	case EM_GETHANDLE:
		fprintf(stream, &quot;EM_GETHANDLE&quot;);
		break;
	//case EM_GETIMESTATUS:
	//	fprintf(stream, &quot;EM_GETIMESTATUS&quot;);
	//	break;
	case EM_GETLIMITTEXT:
		fprintf(stream, &quot;EM_GETLIMITTEXT&quot;);
		break;
	case EM_GETLINE:
		fprintf(stream, &quot;EM_GETLINE&quot;);
		break;
	case EM_GETLINECOUNT:
		fprintf(stream, &quot;EM_GETLINECOUNT&quot;);
		break;
	case EM_GETMARGINS:
		fprintf(stream, &quot;EM_GETMARGINS&quot;);
		break;
	case EM_GETMODIFY:
		fprintf(stream, &quot;EM_GETMODIFY&quot;);
		break;
	case EM_GETPASSWORDCHAR:
		fprintf(stream, &quot;EM_GETPASSWORDCHAR&quot;);
		break;
	case EM_GETRECT:
		fprintf(stream, &quot;EM_GETRECT&quot;);
		break;
	case EM_GETSEL:
		fprintf(stream, &quot;EM_GETSEL&quot;);
		break;
	case EM_GETTHUMB:
		fprintf(stream, &quot;EM_GETTHUMB&quot;);
		break;
	case EM_GETWORDBREAKPROC:
		fprintf(stream, &quot;EM_GETWORDBREAKPROC&quot;);
		break;
	case EM_LIMITTEXT:
		fprintf(stream, &quot;EM_LIMITTEXT&quot;);
		break;
	case EM_LINEFROMCHAR:
		fprintf(stream, &quot;EM_LINEFROMCHAR&quot;);
		break;
	case EM_LINEINDEX:
		fprintf(stream, &quot;EM_LINEINDEX&quot;);
		break;
	case EM_LINELENGTH:
		fprintf(stream, &quot;EM_LINELENGTH&quot;);
		break;
	case EM_LINESCROLL:
		fprintf(stream, &quot;EM_LINESCROLL&quot;);
		break;
	case EM_POSFROMCHAR:
		fprintf(stream, &quot;EM_POSFROMCHAR&quot;);
		break;
	case EM_REPLACESEL:
		fprintf(stream, &quot;EM_REPLACESEL&quot;);
		break;
	case EM_SCROLL:
		fprintf(stream, &quot;EM_SCROLL&quot;);
		break;
	case EM_SCROLLCARET:
		fprintf(stream, &quot;EM_SCROLLCARET&quot;);
		break;
	case EM_SETHANDLE:
		fprintf(stream, &quot;EM_SETHANDLE&quot;);
		break;
	//case EM_SETIMESTATUS:
	//	fprintf(stream, &quot;EM_SETIMESTATUS&quot;);
	//	break;

	case EM_SETMARGINS:
		fprintf(stream, &quot;EM_SETMARGINS&quot;);
		break;
	case EM_SETMODIFY:
		fprintf(stream, &quot;EM_SETMODIFY&quot;);
		break;
	case EM_SETPASSWORDCHAR:
		fprintf(stream, &quot;EM_SETPASSWORDCHAR&quot;);
		break;
	case EM_SETREADONLY:
		fprintf(stream, &quot;EM_SETREADONLY&quot;);
		break;
	case EM_SETRECT:
		fprintf(stream, &quot;EM_SETRECT&quot;);
		break;
	case EM_SETRECTNP:
		fprintf(stream, &quot;EM_SETRECTNP&quot;);
		break;
	case EM_SETSEL:
		fprintf(stream, &quot;EM_SETSEL&quot;);
		break;
	case EM_SETTABSTOPS:
		fprintf(stream, &quot;EM_SETTABSTOPS&quot;);
		break;
	case EM_SETWORDBREAKPROC:
		fprintf(stream, &quot;EM_SETWORDBREAKPROC&quot;);
	case EM_UNDO:
		fprintf(stream, &quot;EM_UNDO&quot;);
		break;

	//case EN_ALIGN_LTR_EC:
	//	fprintf(stream, &quot;EN_ALIGN_LTR_EC&quot;);
	//	break;
	//case EN_ALIGN_RTL_EC:
	//	fprintf(stream, &quot;EN_ALIGN_RTL_EC&quot;);
	//	break;
	case EN_CHANGE:
		fprintf(stream, &quot;EN_CHANGE&quot;);
		break;
	case EN_ERRSPACE:
		fprintf(stream, &quot;EN_ERRSPACE&quot;);
		break;
	case EN_HSCROLL:
		fprintf(stream, &quot;EN_HSCROLL&quot;);
		break;
	case EN_KILLFOCUS:
		fprintf(stream, &quot;EN_KILLFOCUS&quot;);
		break;
	case EN_MAXTEXT:
		fprintf(stream, &quot;EN_MAXTEXT&quot;);
		break;
	case EN_SETFOCUS:
		fprintf(stream, &quot;EN_SETFOCUS&quot;);
		break;
	case EN_UPDATE:
		fprintf(stream, &quot;EN_UPDATE&quot;);
		break;
	case EN_VSCROLL:
		fprintf(stream, &quot;EN_VSCROLL&quot;);
		break;
	case WM_COMMAND:
		fprintf(stream, &quot;WM_COMMAND&quot;);
		break;
	case WM_COPY:
		fprintf(stream, &quot;WM_COPY&quot;);
		break;
	case WM_CTLCOLOREDIT:
		fprintf(stream, &quot;WM_CTLCOLOREDIT&quot;);
		break;

	case WM_PASTE:
		fprintf(stream, &quot;WM_PASTE&quot;);
		break;
	case WM_UNDO:
		fprintf(stream, &quot;WM_UNDO&quot;);
		break;

	case WM_DISPLAYCHANGE:
		fprintf(stream, &quot;WM_DISPLAYCHANGE&quot;);
		break;
	case WM_ERASEBKGND:
		fprintf(stream, &quot;WM_ERASEBKGND&quot;);
		break;
	case WM_ICONERASEBKGND:
		fprintf(stream, &quot;WM_ICONERASEBKGND&quot;);
		break;
	case WM_NCPAINT:
		fprintf(stream, &quot;WM_NCPAINT&quot;);
		break;
	case WM_PAINT:
		fprintf(stream, &quot;WM_PAINT&quot;);
		break;
	case WM_PAINTICON:
		fprintf(stream, &quot;WM_PAINTICON&quot;);
		break;
	case WM_PRINT:
		fprintf(stream, &quot;WM_PRINT&quot;);
		break;
	case WM_PRINTCLIENT:
		fprintf(stream, &quot;WM_PRINTCLIENT&quot;);
		break;
	case WM_SETREDRAW:
		fprintf(stream, &quot;WM_SETREDRAW&quot;);
		break;
	//case WM_SYNCPAIN:
	//	fprintf(stream, &quot;WM_SYNCPAIN&quot;);
	//	break;


//	case WM_APPCOMMAND:
//		fprintf(stream, &quot;WM_APPCOMMAND&quot;);
//		break;
	case WM_CHAR:
		fprintf(stream, &quot;WM_CHAR&quot;);
		break;
	case WM_DEADCHAR:
		fprintf(stream, &quot;WM_DEADCHAR&quot;);
		break;
	case WM_GETHOTKEY:
		fprintf(stream, &quot;WM_GETHOTKEY&quot;);
		break;
	case WM_HOTKEY:
		fprintf(stream, &quot;WM_HOTKEY&quot;);
		break;

	case WM_KEYUP:
		fprintf(stream, &quot;WM_KEYUP&quot;);
		break;
	case WM_KILLFOCUS:
		fprintf(stream, &quot;WM_KILLFOCUS&quot;);
		break;
	case WM_SETFOCUS:
		fprintf(stream, &quot;WM_SETFOCUS&quot;);
		break;
	case WM_SETHOTKEY:
		fprintf(stream, &quot;WM_SETHOTKEY&quot;);
		break;
	case WM_SYSCHAR:
		fprintf(stream, &quot;WM_SYSCHAR&quot;);
		break;
	case WM_SYSDEADCHAR:
		fprintf(stream, &quot;WM_SYSDEADCHAR&quot;);
		break;
	case WM_SYSKEYDOWN:
		fprintf(stream, &quot;WM_SYSKEYDOWN&quot;);
		break;

//	case WM_CHANGEUISTATE:
//		fprintf(stream, &quot;WM_CHANGEUISTATE&quot;);
//		break;
	case WM_INITMENU:
		fprintf(stream, &quot;WM_INITMENU&quot;);
		break;
	case WM_INITMENUPOPUP:
		fprintf(stream, &quot;WM_INITMENUPOPUP&quot;);
		break;
	case WM_MENUCHAR:
		fprintf(stream, &quot;WM_MENUCHAR&quot;);
		break;
	case WM_MENUSELECT:
		fprintf(stream, &quot;WM_MENUSELECT&quot;);
		break;
//	case WM_QUERYUISTATE:
//		fprintf(stream, &quot;WM_QUERYUISTATE&quot;);
//		break;

	case WM_SYSCOMMAND :
		fprintf(stream, &quot;WM_SYSCOMMAND &quot;);
		break;
//	case WM_UPDATEUISTAT:
//		fprintf(stream, &quot;WM_UPDATEUISTAT&quot;);
//		break;

	case WM_CAPTURECHANGED:
		fprintf(stream, &quot;WM_CAPTURECHANGED&quot;);
		break;
	case WM_LBUTTONDBLCLK:
		fprintf(stream, &quot;WM_LBUTTONDBLCLK&quot;);
		break;
	case WM_LBUTTONDOWN:
		fprintf(stream, &quot;WM_LBUTTONDOWN&quot;);
		break;
	case WM_LBUTTONUP:
		fprintf(stream, &quot;WM_LBUTTONUP&quot;);
		break;
	case WM_MBUTTONDBLCLK:
		fprintf(stream, &quot;WM_MBUTTONDBLCLK&quot;);
		break;
	case WM_MBUTTONDOWN:
		fprintf(stream, &quot;WM_MBUTTONDOWN&quot;);
		break;
	case WM_MBUTTONUP:
		fprintf(stream, &quot;WM_MBUTTONUP&quot;);
		break;
	case WM_MOUSEACTIVATE:
		fprintf(stream, &quot;WM_MOUSEACTIVATE&quot;);
		break;
	//case WM_MOUSEHOVER:
	//	fprintf(stream, &quot;WM_MOUSEHOVER&quot;);
	//	break;
	//case WM_MOUSELEAVE:
	//	fprintf(stream, &quot;WM_MOUSELEAVE&quot;);
	//	break;

//	case WM_MOUSEWHEEL:
//		fprintf(stream, &quot;WM_MOUSEWHEEL&quot;);
//		break;
	case WM_NCHITTEST:
		fprintf(stream, &quot;WM_NCHITTEST&quot;);
		break;
	case WM_NCLBUTTONDBLCLK:
		fprintf(stream, &quot;WM_NCLBUTTONDBLCLK&quot;);
		break;
	case WM_NCLBUTTONDOWN:
		fprintf(stream, &quot;WM_NCLBUTTONDOWN&quot;);
		break;
	case WM_NCLBUTTONUP:
		fprintf(stream, &quot;WM_NCLBUTTONUP&quot;);
		break;
	case WM_NCMBUTTONDBLCLK:
		fprintf(stream, &quot;WM_NCMBUTTONDBLCLK&quot;);
		break;
	case WM_NCMBUTTONDOWN:
		fprintf(stream, &quot;WM_NCMBUTTONDOWN&quot;);
		break;
	case WM_NCMBUTTONUP:
		fprintf(stream, &quot;WM_NCMBUTTONUP&quot;);
		break;
	//case WM_NCMOUSEHOVER:
//		fprintf(stream, &quot;WM_NCMOUSEHOVER&quot;);
//		break;
//	case WM_NCMOUSELEAVE:
//		fprintf(stream, &quot;WM_NCMOUSELEAVE&quot;);
//		break;
	case WM_NCMOUSEMOVE:
		fprintf(stream, &quot;WM_NCMOUSEMOVE&quot;);
		break;
	case WM_NCRBUTTONDBLCLK:
		fprintf(stream, &quot;WM_NCRBUTTONDBLCLK&quot;);
		break;
	case WM_NCRBUTTONDOWN:
		fprintf(stream, &quot;WM_NCRBUTTONDOWN&quot;);
		break;
	case WM_NCRBUTTONUP:
		fprintf(stream, &quot;WM_NCRBUTTONUP&quot;);
		break;
//	case WM_NCXBUTTONDBLCLK:
//		fprintf(stream, &quot;WM_NCXBUTTONDBLCLK&quot;);
//		break;
//	case WM_NCXBUTTONDOWN:
//		fprintf(stream, &quot;WM_NCXBUTTONDOWN&quot;);
//		break;
//	case WM_NCXBUTTONUP:
//		fprintf(stream, &quot;WM_NCXBUTTONUP&quot;);
//		break;
	case WM_RBUTTONDBLCLK:
		fprintf(stream, &quot;WM_RBUTTONDBLCLK&quot;);
		break;
	case WM_RBUTTONDOWN:
		fprintf(stream, &quot;WM_RBUTTONDOWN&quot;);
		break;
	case WM_RBUTTONUP :
		fprintf(stream, &quot;WM_RBUTTONUP &quot;);
		break;
//	case WM_XBUTTONDBLCLK:
//		fprintf(stream, &quot;WM_XBUTTONDBLCLK&quot;);
//		break;
//	case WM_XBUTTONDOWN:
//		fprintf(stream, &quot;WM_XBUTTONDOWN&quot;);
//		break;
//	case WM_XBUTTONU:
//		fprintf(stream, &quot;WM_XBUTTONU&quot;);
//		break;

	case  WM_SETCURSOR:
		fprintf(stream, &quot;WM_SETCURSOR&quot;);
		break;


	default:
		fprintf(stream, &quot;not listed %d&quot;, uMsg);		
		break;
	}
	fprintf(stream, &quot;\n&quot;);
	return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
*/


/*
LRESULT CALLBACK WindowProc
				(HWND hwnd,      // handle to window
				UINT uMsg,      // message identifier
				WPARAM wParam,  // first message parameter
				LPARAM lParam   // second message parameter
				)
{
	HDC hdc;
	PAINTSTRUCT ps;
	RECT rect;
	HBRUSH hbrush, oldBrush;
	char buf[80];
	COLORREF color;//=RGB(255, 0, 0);
	switch (uMsg)
	{
	case WM_PAINT:
		hdc=BeginPaint(hwnd, &amp;ps);
	
		//color=RGB(count++, 0, 0);
		hbrush=CreateSolidBrush(color);
		oldBrush=(HBRUSH)SelectObject(hdc, hbrush);
		GetClientRect(hwnd, &amp;rect);
		
		
		//SetBrushOrgEx(hdc, 10, 10, NULL);
		PatBlt(hdc, rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top, PATINVERT);
		SelectObject(hdc, oldBrush);


		sprintf(buf, &quot;hello world!&quot;);
		TextOut(hdc, 100, 100, buf, strlen(buf));
		EndPaint(hwnd, &amp;ps);
		return 0L;
		break;

	case WM_DESTROY:
		PostQuitMessage(0);
		return 0L;
		break;
	case  WM_MOUSEACTIVATE:
		return MA_ACTIVATEANDEAT;
		break;
	//default:
	//	return DefWindowProc(hwnd, uMsg, wParam, lParam);
	//	break;
		
	case WM_NCCREATE:
		return TRUE;
		break;
	case WM_CREATE:
		return 0;
		break;

	case WM_NCACTIVATE:
		if (!wParam)
		{
			hdc = GetDC(hwnd);
			sprintf(buf, &quot;WM_NCACTIVATE&quot;);
			TextOut(hdc, 100, 180, buf, strlen(buf));
			// Paint into this DC
			ReleaseDC(hwnd, hdc);
			return TRUE;
		}
		else
		{
			return FALSE;
		}
		break;
	case WM_ERASEBKGND:
		if (wParam!=NULL)
		{
			hdc=(HDC)wParam;
			color=RGB(count++, 0, 0);
			hbrush=CreateSolidBrush(color);
			oldBrush=(HBRUSH)SelectObject(hdc, hbrush);
			GetClientRect(hwnd, &amp;rect);			
			
			//SetBrushOrgEx(hdc, 10, 10, NULL);
			PatBlt(hdc, rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top, PATINVERT);
			SelectObject(hdc, oldBrush);
			
		}
		return 1L;		
		break;

	}
	return 0L;
}
*/

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, 
				   int nShowCmd)
{
	char szWinApp[]=&quot;szMyWinClass&quot;;

	stream=fopen(&quot;mylog.txt&quot;, &quot;w&quot;);
	//fprintf(stream, &quot;message begins:\n&quot;);

	HWND hwnd;
	MSG msg;

	if (!hPrevInstance)
	{
		nWinWidth=GetSystemMetrics(SM_CXSCREEN)/2;
		nWinHeight=GetSystemMetrics(SM_CYSCREEN)/2;
		
		
		memset(&amp;wndClass, 0, sizeof(WNDCLASS));

		
		wndClass.lpszClassName=szWinApp;
		wndClass.style=CS_HREDRAW|CS_VREDRAW;
		wndClass.hInstance=hInstance;
		wndClass.lpfnWndProc=WindowProc;
		wndClass.cbClsExtra=wndClass.cbWndExtra=0;
		wndClass.hIcon=LoadIcon(NULL, IDI_APPLICATION);
		wndClass.hCursor=LoadCursor(NULL, IDC_ARROW);
		wndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
		wndClass.lpszMenuName=NULL;

		if (!RegisterClass(&amp;wndClass))
		{
			int err=GetLastError();
			return FALSE;
		}
	
	}

	hwnd=CreateWindow(szWinApp, &quot;My Window Test&quot;,
		WS_OVERLAPPEDWINDOW|WS_VISIBLE, 0, 0, 
		nWinWidth, nWinHeight, NULL, NULL, hInstance, NULL);
	if (!hwnd)
	{
		int err=GetLastError();
		return FALSE;
	
	}
	ShowWindow(hwnd, nShowCmd);
	UpdateWindow(hwnd);

	while (GetMessage(&amp;msg, NULL, 0, 0))
	{
		TranslateMessage(&amp;msg);
		DispatchMessage(&amp;msg);
	}
	fclose(stream);
	return msg.wParam;
}</pre>
<pre>
</pre>
<pre>
</pre>
<pre>　</pre>
<p>　</p>
<p>　</p>

<pre></pre>

<pre></pre>

<pre></pre>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;                                   
&nbsp;&nbsp;&nbsp; <a href="PocketRuler.htm">                  







                       <img src="picture/back.gif" style="border: medium none" alt="back.gif (341 bytes)" width="32" height="35"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<a href="index.htm">
<img src="picture/up.gif" style="border: medium none" alt="up.gif (335 bytes)" width="35" height="32"></a>       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;                         
<img src="picture/next.gif" style="border: medium none" alt="next.gif (337 bytes)" width="32" height="35">          


</p>

</body>

</html>