2012年(27)
分类: C/C++
2012-03-16 15:09:00
使用定时器
回调就是不是你调别人,而是别人调你。时间到了会叫你,没到的时候不会烦你。
让Windows直接将定时器消息发送给您程序的另一个函数。
我们把以下的callback函数称为TimerProc(您能够选择与其它一些用语不会发生冲突的 任何名称),它只处理WM_TIMER消息:
VOID CALLBACK TimerProc (HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime);
SetTimer (hwnd, iTimerID, iMsecInterval, TimerProc) ;
2、得到当前日期:
void GetLocalTime(LPSYSTEMTIME);
SYSTEMTIME stLocal;
char chBuf[256];
GetLocalTime(&stLocal);
//显示时间的间隔。
wsprintf(chBuf,TEXT("%u/%u/%u %u:%u:%u:%u 周%d\r\n"),
stLocal.wYear, stLocal.wMonth, stLocal.wDay,
stLocal.wHour, stLocal.wMinute, stLocal.wSecond,
stLocal.wMilliseconds,stLocal.wDayOfWeek);
MessageBox(NULL,chBuf,"",MB_OK);
SetTimer(hwnd,1,1000,TimerProc);
void CALLBACK TimerProc (HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)
{
SYSTEMTIME time;
GetLocalTime(&time);
TCHAR strTime[256];
//%后面的0表示不够的位数补零,5是总位数,就这样
wsprintf(strTime,"%04d-%02d-%02d
%02d:%02d:%02d",time.wYear,time.wMonth,time.wDay,time.wHour,time.wMinute,time.wSecond);
SetDlgItemText(hwnd,IDC_EDTTIME,strTime);
}
3、取得复选按钮的是否选中:
LRESULT Button_GetCheck(
HWND hwndCtl);BST_CHECKED BST_UNCHECKED
设置复选按钮是否选中:
LRESULT Button_SetCheck(
HWND hwndCtl, int check);BST_CHECKED BST_UNCHECKED
4、ListBox(和Combo类似)
(1)添加项:
如果采用LBS_SORT样式,那么填入清单方块最简单的方法是借助ListBox_AddString:
int ListBox_AddString(HWND hwndCtl, LPCSTR lpsz);
如果没有采用LBS_SORT,那么可以使用ListBox_InsertString指定一个索引值,将字符串 插入到清单方块中:
int ListBox_InsertString(
HWND hwndCtl, int index,
LPCSTR lpsz);
(2)删除项:
int ListBox_DeleteString(HWND hwndCtl, int index);
(3)取得有多少项:
int ListBox_GetCount(HWND hwndCtl);
(4)选定某一项:
int ListBox_SetCurSel( HWND hwndCtl, int index);
将iParam设定为-1则取消所有选择
(5) 确定目前选项的索引:
int ListBox_GetCurSel(HWND hwndCtl);
如果没有项目被选中,那么从呼叫中传回的iIndex值为LB_ERR。
(6)将某项目复制到文字缓冲区中:
int ListBox_GetText( HWND hwndCtl, int index, LPCTSTR lpszBuffer);
5、菜单资源
(1)制作好菜单资源后,在对话框的Menu属性中选择刚才制作好的对话框。
(2)响应菜单操作。菜单点击后也会发送WM_COMMAND消息id就是被选择菜单的id。例子 :
case IDM_QUIT:
EndDialog(hwnd,id);