
定时器相关内容.doc
3页1、让 Windows 直接将定时器消息发送给程序的另一个函数 计时器函数:SetTimer(hwnd,iTimerID,iMseclnterval,TimerProc); hwnd:窗口句柄;iTimerID:定时器的 ID;iMseclnterval:每隔多少毫秒调一次回调 函数;TimerProc:时间到了的时候被调用的回调函数,实际是一个函数指针 回调函数:void CALLBACK TimerProc(HWND hwnd,UNIT message,UNIT iTimerID,DWORD dwTime ); hwnd:窗口句柄;message:消息;iTimerID:定时器 ID;dwTime:时间 例如: SetTimer(hwnd,0,1000,MyTimerProc); void CALLBACK TimerProc(HWND hwnd,UINT message,UINT iTimerID,DWORD dwTime ) { SYSTEMTIME time; GetLocalTime( TCHAR strTime[256]; //%后面的 0 表示不够的位数补零,5 是总位数 wsprintf(strTime,”%04d-%02d-%02d %02d:%02d:%02d”, time.wYear,time.wMonth,timw.wDay,time.wHour,time.wMinute,time.wSecond); } 2、得到当前日期 void GetLocalTime(LPSYSTEMTIME); //LP 是指针的前缀 例如: SYSTEMTIME stLocal; char chBuf[256]; GetLocalTime( //显示时间间隔 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); 例 2: void CALLBACK MyTimerProc(HWND hwnd,UINT message,UINT iTimerID,DWORD dwTime ) { SYSTEMTIME stLocal; GetLocalTime( TCHAR strTime[256]; //%后面的 0 表示不够的位数补零,5 是总位数 wsprintf(strTime,“%i 年%i 月%i 日 %i:%i:%i“,stLocal.wYear,stLocal.wMonth, stLocal.wDay,stLocal.wHour,stLocal.wMinute,stLocal.wSecond); SetDlgItemText(hwnd,IDC_EDITTIME,strTime); }3、取得复选按钮是否被选中 LRESULT Button_GetCheck(HWND hwndCtl); BST_CHECKED BST_UNCHECKED(有三种状态,此为常见的 2 种) 设置复选按钮是否被选中 LRESULT Button_SetCheck(HWND hwndCtl,int check); BST_CHECKED BST_UNCHECKED 技巧:正向缩进(选中代码后按“Tab”键) ,反向缩进(选中代码后按“Tab”+“Shift”键组合) 。
例如:case IDC_OK: { HWND hwndCheck=GetDlgItem(hwnd,IDC_CHECK1); int checkState=Button_GetCheck(hwndCheck); if(BST_CHECKED==checkState) { MessageBox(hwnd,TEXT(“复选框被选中!“),TEXT(““),MB_OK); } if(BST_UNCHECKED==checkState) { MessageBox(hwnd,TEXT(“复选框没有被选中!“),TEXT(“提示“),MB_OK); } }break; case IDC_BUTTON1: { HWND hwndCheck=GetDlgItem(hwnd,IDC_CHECK1); int checkState=Button_GetCheck(hwndCheck); if(BST_CHECKED==checkState) { Button_SetCheck(hwndCheck,BST_UNCHECKED); } if(BST_UNCHECKED==checkState) { Button_SetCheck(hwndCheck,BST_CHECKED); } } break; 4、ListBox(和 Combo 类似) (1)添加项 如果采用 LBS_SORT 样式,那么填入清单方块最简单的方法是借助 ListBox_AddString: int ListBox_AddString(HWND hwndCtl, LPCSTR ipsz); 如果没有采用 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_GetCurSel( 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 ); case ID_MENUITEMOPEN: { MessageBox(hwnd,TEXT(“打开“),TEXT(““),MB_OK); } 退出对话框: case IDC_BUTTONQUIT: { EndDialog(hwnd,IDD_MAIN); }。












