本节知识点:
一. 计时器()Timer
-
VOID CALLBACK TimerProc (HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime);
第一个参数是窗口句柄,第二个是消息, 第三个是计时器ID, 第四个是时间
-
SetTimer (hwnd, iTimerID, iMsecInterval, TimerProc) ;
第一个参数是窗口句柄,第二个是计时器ID, 第三个是过多长时间执行一次(单位是毫秒),第四个timdrpeoc是被调函数
-
void GetLocalTime(LPSYSTEMTIME);
得到当前日期, LP是结构体指针的前缀,也就是说参数是指针形式
二. 复选框
-
LRESULT Button_GetCheck( HWND hwndCtl);BST_CHECKED BST_UNCHECKED
取得复选按钮是否选中
-
LRESULT Button_SetCheck( HWND hwndCtl, int check);BST_CHECKED BST_UNCHECKED
设置复选按钮是否选中
三. 列表框(和组合框一样)
-
GetDlgItem ————由对话框句柄+id 得到控件的句柄,返回HWND类型
例如:HWND hwndCombo1 = GetDlgItem(hwnd, IDC_LIST1);
hwndCombo1是变量名,IDC_LIST1 是控件ID(名称), 大致意思:实现把控件的句柄放到变量hwndCombo1中
-
ListBox_AddString ————添加一项,并不是按照顺序添加项
例如: ListBox_AddString(hwndLIST1, TEXT("河南省"));
hwndLIST1是控件的句柄
-
ListBox_InsertString———— 添加一项,依次向最后一项添加
例如: ListBox_InsertString(hwndLIST1, -1, TEXT("河南省"));
第一个参数hwndLIST1是控件的句柄,第二个参数是索引
-
ListBox_GetCurSel————得到当前项的索引,返回int类型
例如: int CurSel = ListBox_GetCurSel(hwndLIST1);
hwndLIST1是控件的句柄
-
ListBox_GetCount ————取得有多少项,返回int类型
例如: int count = ListBox_GetCount(hwndLIST1);
hwndLIST1是控件的句柄
-
ListBox_DeleteString ———— 删除项
例如: ListBox_DeleteString(hwndLIST1, 1);
第一个参数hwndLIST1是控件的句柄,第二个参数是索引
-
ListBox_SetCurSel———— 选择某一项
例如:ListBox_SetCurSel(hwndLIST1, 1);
第一个参数hwndLIST1是控件的句柄,第二个参数是索引
-
ListBox_GetLBText ————得到某项的值,放到字符串指针中
例如:ListBox_GetLBText(hwndLIST1, 1, str);
第一个参数hwndLIST1是控件的句柄,第二个参数是索引,第三个参数是字符串指针
四. 菜单资源
-
制作好菜单资源后,在对话框的 Menu 属性中选择刚才制作好的对话框。(参考part2)
-
响应菜单操作。菜单点击后也会发送 WM_COMMAND 消息 id 就是被选择菜单的 id。
例子:case ID_MENUITEMOPEN:
//case 后边是菜单的ID
小时钟练习:
1. 控件如下:
右击标题栏,在属性窗口中改标题为小时钟
样式属性中可加上最大最小化
void CALLBACK mytimer(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTImer)
{
//MessageBox(hwnd, TEXT("被调"), TEXT(""), MB_OK);
SYSTEMTIME stLocal; //内置的结构体
GetLocalTime(&stLocal);//得到指针的形式
TCHAR strTime[256];
wsprintf(strTime, "%d年%d月%d日 %d:%d:%d", stLocal.wYear ,stLocal.wMonth , stLocal.wDay , stLocal.wHour ,
stLocal.wMinute , stLocal.wSecond );
SetDlgItemText(hwnd, IDC_STATIC1, strTime); //将得到的年月日及时间放到标签中
}
BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
//SetTimer(hwnd, 0, 3000, mytimer);
SetTimer(hwnd, 0, 1000, mytimer); //对mytimer函数进行调用
return TRUE;
}
3. 运行效果:
记事本
1. 控件如下:
2. 文本框默认是单行输入
3. 要想多行输入,需在属性中选择【多行】:
4. 换行需要按CTRL+ENTER
5. 插入一个菜单栏,设置一个打开按钮
6. 代码如下:
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
switch(id)
{
case ID_MENUITEMOPEN:
{
FILE * fp;
fp = fopen("d:/cyyyngds/seven/1.txt", "r"); // d:/cyyyngds/seven/目录必须有1.txt
char line[256];
fgets(line, sizeof(line), fp);
fclose(fp);
SetDlgItemText(hwnd, IDC_EDIT1, line);
}
break;
default:
break;
}
}
7. 运行效果:
当选择【文件】—>【打开】
由于此文本框控件比较单一,要想使用丰富的功能可使用RichEdit 控件
自学参考资料:msdn.microsoft.com/en-us/libra…