<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>芷菁博客 &#187; window</title>
	<atom:link href="http://www.stars625.com/tag/window/feed" rel="self" type="application/rss+xml" />
	<link>http://www.stars625.com</link>
	<description>记录生活点滴，分享学习体会，专注微嵌开发。</description>
	<lastBuildDate>Sun, 18 Jul 2010 02:55:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>用Window API编写的定时器程序</title>
		<link>http://www.stars625.com/pscountdown.html</link>
		<comments>http://www.stars625.com/pscountdown.html#comments</comments>
		<pubDate>Sun, 20 Sep 2009 07:19:25 +0000</pubDate>
		<dc:creator>stars_625</dc:creator>
				<category><![CDATA[学习分享]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[window]]></category>

		<guid isPermaLink="false">http://www.stars625.com/?p=227</guid>
		<description><![CDATA[这是一个用Window API编写的小程序，主要功能是倒计时提醒。通过设定倒计时间，待时间归零后通过托盘汽球提示提醒。学习了Window的消息处理机制、对话框按钮的窗口机制以及Win32的托盘程序编程。]]></description>
			<content:encoded><![CDATA[<p><strong>程序由来</strong></p>
<p>有时候煤气灶炖东西、洗衣机放水都需要一段等待时间，这时候去做其它事情很容易忘记时间，引发汤锅溢出、浪费水资源。以前在广告上看过一款水果定时器，是机械式的，只要根据时间长短一拧，就能在时间到了的时候发出声音提醒，很好、很方便，可是那是要钱的。根据自身经验，一般在家务无人值守时间经常是在电脑前，遂想找一款定时器程序。网上一般有两种，设定一个时间进行提醒，这种太麻烦了；还要一种就是倒计时提醒，正是我需要的，但网上的一般都不完善，而且用对话框弹出挺吓人的，没办法只能自己做一个了。另外还可以用这个工具来掐广告时间，对于一边看电视，一边玩电脑的朋友再好不过了。</p>
<p><strong>设计思路</strong></p>
<p>小巧、方便，这是小工具开发的一般要求，想了很多方案也拿出来晒晒。前阵子学了一段时间的GTK+编程，本来想做它来做，但这需要安装GTK+动态库，不方便用户使用，而且也用不着在Linux下使用（Linux下可以用很多脚本语言实现：Bash、Paython、Perl），还是考虑用MFC开发吧。但VC6的SDK老了点，不支持托盘程序编写，还要升级SDK，遂考虑用Win API来实现，反正程序也不大，而且与GTK+编程有点类似，另外也可以保证程序纯绿色产品，不用额外安装其它组件。开发环境用的是MinSYS+MinGW最新版的，里机的SDK支持托盘程序的开发，也是我比较喜欢的开发方式：C+VIM+GCC。</p>
<p>一开始考虑程序可以支持快捷操作，如设定几个常用定时按钮：1min、5min、10min、30min、60min等，这样直接一点就可以启动定时器了；用滑块来设定时间，用鼠标直接点击拖动就可以设定时间，都不用键盘输入；可以设定倒计时的时、分、秒；可以设定多组定时器，而且可以设定每组定时器的提醒内容等，便这一切都会大大的增加程序的复杂性、体积，显示功能累赘，在一系列比较、思想斗争后选定了最终方案。一个程序只能设定一组定时器，如果您需要多组那么可以开多个程序；定时时间限定在60分钟以内，这可以减少程序对输入数据的有限性验证有数据溢出的麻烦，如果超过一小时请使用更专业的软件；取消提醒内容设定，理由同上；用户交互只使用一个文本框和一个按钮，简化API程序开发。</p>
<p><strong>使用方法</strong></p>
<p>可执行文件总共24.1KB，运行时占用内存3.6MB，程序运行界面如下：</p>
<div id="attachment_228" class="wp-caption aligncenter" style="width: 330px"><a href="http://www.stars625.com/pscountdown.html"><img src="http://www.stars625.com/wp-content/uploads/pscountdown1.jpg" alt="PSCountdown主界面" title="pscountdown1" width="320" height="240" class="size-full wp-image-228" /></a><p class="wp-caption-text">PSCountdown主界面</p></div>
<p>在右上的文件框中输入要等待的时间，数值范围为：1~60，单位为分钟，输入完成后点击“apply”按钮，这时程序会最小化到屏幕右下脚托盘区，点击托盘图标可以呼出主界面查看剩余时间或重新设定时间。时间归零后屏幕右下脚出现汽球提示如下图，单击提示退出程序。</p>
<div id="attachment_229" class="wp-caption aligncenter" style="width: 330px"><a href="http://www.stars625.com/pscountdown.html"><img src="http://www.stars625.com/wp-content/uploads/pscountdown2.jpg" alt="PSCountdown定时器提醒界面" title="pscountdown2" width="320" height="120" class="size-full wp-image-229" /></a><p class="wp-caption-text">PSCountdown定时器提醒界面</p></div>
<p>完整程序如下:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#define    _WIN32_IE        0x0600</span>
&nbsp;
<span style="color: #339933;">#include &lt;stdio.h&gt;</span>
<span style="color: #339933;">#include &lt;stdlib.h&gt;</span>
<span style="color: #339933;">#include &lt;string.h&gt;</span>
<span style="color: #339933;">#include &lt;windows.h&gt;</span>
<span style="color: #339933;">#include &lt;time.h&gt;</span>
&nbsp;
<span style="color: #339933;">#define ID_TIMER		1</span>
<span style="color: #339933;">#define ID_APPLY		2002</span>
<span style="color: #339933;">#define ID_HIDE			2003</span>
<span style="color: #339933;">#define ID_ICON			2005</span>
&nbsp;
HWND        hwnd<span style="color: #339933;">;</span>
HWND        hwnd_apply<span style="color: #339933;">;</span>
HWND        hwnd_min<span style="color: #339933;">;</span>
HWND		hwnd_rest<span style="color: #339933;">;</span>
HWND		hwnd_current<span style="color: #339933;">;</span>
HWND		hwnd_tips<span style="color: #339933;">;</span>
&nbsp;
NOTIFYICONDATA    nd<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">int</span> RestTime <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">char</span> szAppName<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;PSCountdown&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">void</span> ShowNotify<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    nd.<span style="color: #202020;">uFlags</span> <span style="color: #339933;">|=</span> NIF_INFO<span style="color: #339933;">;</span>
    strcpy<span style="color: #009900;">&#40;</span>nd.<span style="color: #202020;">szInfoTitle</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;PSCountdown&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    strcpy<span style="color: #009900;">&#40;</span>nd.<span style="color: #202020;">szInfo</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Setting Time Count Down!!!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    Shell_NotifyIcon<span style="color: #009900;">&#40;</span>NIM_MODIFY<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>nd<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> CALLBACK TimerProc<span style="color: #009900;">&#40;</span>HWND hwnd<span style="color: #339933;">,</span> UINT uMsg<span style="color: #339933;">,</span> UINT idEvent<span style="color: #339933;">,</span> DWORD dwTime<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">char</span> m_str<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">30</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
	SYSTEMTIME SysTime<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>RestTime <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		RestTime<span style="color: #339933;">--;</span>
		sprintf<span style="color: #009900;">&#40;</span>m_str<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Rest Seconds: %d&quot;</span><span style="color: #339933;">,</span> RestTime<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		SetWindowText<span style="color: #009900;">&#40;</span>hwnd_rest<span style="color: #339933;">,</span> m_str<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>RestTime <span style="color: #339933;">&lt;=</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>ShowNotify<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	GetLocalTime<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>SysTime<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	sprintf<span style="color: #009900;">&#40;</span>m_str<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Current Time: %02d:%02d:%02d&quot;</span><span style="color: #339933;">,</span> SysTime.<span style="color: #202020;">wHour</span><span style="color: #339933;">,</span> SysTime.<span style="color: #202020;">wMinute</span><span style="color: #339933;">,</span> SysTime.<span style="color: #202020;">wSecond</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	SetWindowText<span style="color: #009900;">&#40;</span>hwnd_current<span style="color: #339933;">,</span> m_str<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> SetRestTime<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">int</span> setime <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
	<span style="color: #993333;">char</span> m_time<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
	GetWindowText<span style="color: #009900;">&#40;</span>hwnd_min<span style="color: #339933;">,</span> m_time<span style="color: #339933;">,</span> <span style="color: #0000dd;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	setime <span style="color: #339933;">=</span> atoi<span style="color: #009900;">&#40;</span>m_time<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>setime<span style="color: #339933;">&gt;</span><span style="color: #0000dd;">60</span> <span style="color: #339933;">||</span> setime<span style="color: #339933;">&lt;=</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>
		MessageBox<span style="color: #009900;">&#40;</span>hwnd<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Setting Time must be 1~60 min!&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Warning&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">else</span>
		RestTime <span style="color: #339933;">=</span> setime <span style="color: #339933;">*</span> <span style="color: #0000dd;">60</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> QuitWin<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	Shell_NotifyIcon<span style="color: #009900;">&#40;</span>NIM_DELETE<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>nd<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	PostQuitMessage<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> IconNotifyProc<span style="color: #009900;">&#40;</span>LPARAM lParam<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span>lParam<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">case</span> WM_LBUTTONDOWN<span style="color: #339933;">:</span>
	<span style="color: #b1b100;">case</span> WM_RBUTTONDOWN<span style="color: #339933;">:</span>
		ShowWindow<span style="color: #009900;">&#40;</span>hwnd<span style="color: #339933;">,</span> SW_NORMAL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">case</span> <span style="color: #208080;">0x404</span><span style="color: #339933;">:</span>
	<span style="color: #b1b100;">case</span> <span style="color: #208080;">0x405</span><span style="color: #339933;">:</span>
		QuitWin<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">default</span><span style="color: #339933;">:</span>
		<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
LRESULT CALLBACK WndProc<span style="color: #009900;">&#40;</span>HWND hwnd<span style="color: #339933;">,</span> UINT iMsg<span style="color: #339933;">,</span> WPARAM wParam<span style="color: #339933;">,</span> LPARAM lParam<span style="color: #009900;">&#41;</span> 
<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">switch</span> <span style="color: #009900;">&#40;</span>iMsg<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">case</span> WM_COMMAND<span style="color: #339933;">:</span>
		<span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span>wParam<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">case</span> ID_APPLY<span style="color: #339933;">:</span>
			SetRestTime<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			ShowWindow<span style="color: #009900;">&#40;</span>hwnd<span style="color: #339933;">,</span> SW_HIDE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">case</span> ID_ICON<span style="color: #339933;">:</span>
			IconNotifyProc<span style="color: #009900;">&#40;</span>lParam<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">default</span><span style="color: #339933;">:</span>
			<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">case</span> WM_SYSCOMMAND<span style="color: #339933;">:</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>wParam <span style="color: #339933;">==</span> SC_MINIMIZE<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			ShowWindow<span style="color: #009900;">&#40;</span>hwnd<span style="color: #339933;">,</span> SW_HIDE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">case</span> WM_DESTROY<span style="color: #339933;">:</span>
		QuitWin<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #b1b100;">return</span> DefWindowProc<span style="color: #009900;">&#40;</span>hwnd<span style="color: #339933;">,</span> iMsg<span style="color: #339933;">,</span> wParam<span style="color: #339933;">,</span> lParam<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> WINAPI WinMain<span style="color: #009900;">&#40;</span>HINSTANCE hInstance<span style="color: #339933;">,</span> HINSTANCE hPrevInstance<span style="color: #339933;">,</span>
           LPSTR szCmdLine<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> iCmdShow<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    MSG         msg<span style="color: #339933;">;</span>
    WNDCLASSEX  wc<span style="color: #339933;">;</span>
	DWORD		style<span style="color: #339933;">;</span>
&nbsp;
    wc.<span style="color: #202020;">cbSize</span>         <span style="color: #339933;">=</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>wc<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    wc.<span style="color: #202020;">style</span>          <span style="color: #339933;">=</span> CS_HREDRAW <span style="color: #339933;">|</span> CS_VREDRAW<span style="color: #339933;">;</span>
    wc.<span style="color: #202020;">lpfnWndProc</span>    <span style="color: #339933;">=</span> WndProc<span style="color: #339933;">;</span>
    wc.<span style="color: #202020;">cbClsExtra</span>     <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    wc.<span style="color: #202020;">cbWndExtra</span>     <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    wc.<span style="color: #202020;">hInstance</span>      <span style="color: #339933;">=</span> hInstance<span style="color: #339933;">;</span>
    wc.<span style="color: #202020;">hIcon</span>          <span style="color: #339933;">=</span> LoadIcon<span style="color: #009900;">&#40;</span>NULL<span style="color: #339933;">,</span> IDI_INFORMATION<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    wc.<span style="color: #202020;">hIconSm</span>        <span style="color: #339933;">=</span> LoadIcon<span style="color: #009900;">&#40;</span>NULL<span style="color: #339933;">,</span> IDI_INFORMATION<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    wc.<span style="color: #202020;">hCursor</span>        <span style="color: #339933;">=</span> LoadCursor<span style="color: #009900;">&#40;</span>NULL<span style="color: #339933;">,</span> IDC_ARROW<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    wc.<span style="color: #202020;">hbrBackground</span>  <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>HBRUSH<span style="color: #009900;">&#41;</span>COLOR_BACKGROUND<span style="color: #339933;">;</span>
    wc.<span style="color: #202020;">lpszClassName</span>  <span style="color: #339933;">=</span> szAppName<span style="color: #339933;">;</span>
    wc.<span style="color: #202020;">lpszMenuName</span>   <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
    RegisterClassEx<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>wc<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	style <span style="color: #339933;">=</span> WS_OVERLAPPEDWINDOW<span style="color: #339933;">;</span>
	style <span style="color: #339933;">&amp;=</span> ~<span style="color: #009900;">&#40;</span>WS_MAXIMIZEBOX <span style="color: #339933;">|</span> WS_SIZEBOX<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    hwnd <span style="color: #339933;">=</span>          CreateWindow<span style="color: #009900;">&#40;</span>szAppName<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;PSCountdown - By stars_625&quot;</span><span style="color: #339933;">,</span>
                    style<span style="color: #339933;">,</span>
                    CW_USEDEFAULT<span style="color: #339933;">,</span> CW_USEDEFAULT<span style="color: #339933;">,</span>
                    <span style="color: #0000dd;">320</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">240</span><span style="color: #339933;">,</span>
                    NULL<span style="color: #339933;">,</span> NULL<span style="color: #339933;">,</span> hInstance<span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    hwnd_apply <span style="color: #339933;">=</span>    CreateWindow<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;BUTTON&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;apply&quot;</span><span style="color: #339933;">,</span>
                    WS_VISIBLE <span style="color: #339933;">|</span> WS_CHILD <span style="color: #339933;">|</span> BS_FLAT<span style="color: #339933;">,</span>
                    <span style="color: #0000dd;">230</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">90</span><span style="color: #339933;">,</span>
                    <span style="color: #0000dd;">50</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">20</span><span style="color: #339933;">,</span>
                    hwnd<span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span>HMENU<span style="color: #009900;">&#41;</span>ID_APPLY<span style="color: #339933;">,</span> hInstance<span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    hwnd_min <span style="color: #339933;">=</span>      CreateWindow<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;EDIT&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;3&quot;</span><span style="color: #339933;">,</span>
                    WS_CHILD <span style="color: #339933;">|</span> WS_VISIBLE <span style="color: #339933;">|</span> WS_BORDER<span style="color: #339933;">,</span>
                    <span style="color: #0000dd;">230</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">40</span><span style="color: #339933;">,</span>
                    <span style="color: #0000dd;">50</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">20</span><span style="color: #339933;">,</span>
                    hwnd<span style="color: #339933;">,</span> NULL<span style="color: #339933;">,</span> hInstance<span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    hwnd_rest <span style="color: #339933;">=</span>     CreateWindow<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;STATIC&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Rest Seconds:&quot;</span><span style="color: #339933;">,</span>
                    WS_CHILD <span style="color: #339933;">|</span> WS_VISIBLE<span style="color: #339933;">,</span>
                    <span style="color: #0000dd;">20</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">90</span><span style="color: #339933;">,</span>
                    <span style="color: #0000dd;">180</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">20</span><span style="color: #339933;">,</span>
                    hwnd<span style="color: #339933;">,</span> NULL<span style="color: #339933;">,</span> hInstance<span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    hwnd_current <span style="color: #339933;">=</span>  CreateWindow<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;STATIC&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Current Time:&quot;</span><span style="color: #339933;">,</span>
                    WS_CHILD <span style="color: #339933;">|</span> WS_VISIBLE<span style="color: #339933;">,</span>
                    <span style="color: #0000dd;">20</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">40</span><span style="color: #339933;">,</span>
                    <span style="color: #0000dd;">180</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">20</span><span style="color: #339933;">,</span>
                    hwnd<span style="color: #339933;">,</span> NULL<span style="color: #339933;">,</span> hInstance<span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    hwnd_tips <span style="color: #339933;">=</span>		CreateWindow<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;STATIC&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;http://www.stars625.com/pscountdown.html&quot;</span><span style="color: #339933;">,</span>
                    WS_CHILD <span style="color: #339933;">|</span> WS_VISIBLE<span style="color: #339933;">,</span>
                    <span style="color: #0000dd;">10</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">150</span><span style="color: #339933;">,</span>
                    <span style="color: #0000dd;">290</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">20</span><span style="color: #339933;">,</span>
                    hwnd<span style="color: #339933;">,</span> NULL<span style="color: #339933;">,</span> hInstance<span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">/*    Create tray icon  */</span>
    nd.<span style="color: #202020;">cbSize</span>    		<span style="color: #339933;">=</span> <span style="color: #993333;">sizeof</span> <span style="color: #009900;">&#40;</span>NOTIFYICONDATA<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    nd.<span style="color: #202020;">hWnd</span>    			<span style="color: #339933;">=</span> hwnd<span style="color: #339933;">;</span>
    nd.<span style="color: #202020;">uID</span>    			<span style="color: #339933;">=</span> ID_ICON<span style="color: #339933;">;</span>
    nd.<span style="color: #202020;">uFlags</span>		    <span style="color: #339933;">=</span> NIF_ICON <span style="color: #339933;">|</span> NIF_MESSAGE <span style="color: #339933;">|</span> NIF_TIP<span style="color: #339933;">;</span>
    nd.<span style="color: #202020;">hIcon</span>    		<span style="color: #339933;">=</span> LoadIcon<span style="color: #009900;">&#40;</span>NULL<span style="color: #339933;">,</span> IDI_INFORMATION<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    nd.<span style="color: #202020;">uCallbackMessage</span>	<span style="color: #339933;">=</span> WM_COMMAND<span style="color: #339933;">;</span>
    strcpy<span style="color: #009900;">&#40;</span>nd.<span style="color: #202020;">szTip</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;PSCountdown - A Time Count Down&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    Shell_NotifyIcon<span style="color: #009900;">&#40;</span>NIM_ADD<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>nd<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    ShowWindow<span style="color: #009900;">&#40;</span>hwnd<span style="color: #339933;">,</span> iCmdShow<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    UpdateWindow<span style="color: #009900;">&#40;</span>hwnd<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	SetTimer<span style="color: #009900;">&#40;</span>hwnd<span style="color: #339933;">,</span> ID_TIMER<span style="color: #339933;">,</span> <span style="color: #0000dd;">1000</span><span style="color: #339933;">,</span> TimerProc<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span> GetMessage<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>msg<span style="color: #339933;">,</span> NULL<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        TranslateMessage<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>msg<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        DispatchMessage<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>msg<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #b1b100;">return</span> msg.<span style="color: #202020;">wParam</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><a href='http://www.stars625.com/wp-content/uploads/PSCountdown.zip'>点击下载完整程序和可执行文件</a></p>
<p>对于程序需要改进的地方欢迎大家跟帖留言。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stars625.com/pscountdown.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
