C语言也能干大事~part 6

400 阅读3分钟

本节知识点:


一. 计时器()Timer

  1. VOID CALLBACK TimerProc (HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime);

    第一个参数是窗口句柄,第二个是消息, 第三个是计时器ID, 第四个是时间


  2. SetTimer (hwnd, iTimerID, iMsecInterval, TimerProc) ;

    第一个参数是窗口句柄,第二个是计时器ID, 第三个是过多长时间执行一次(单位是毫秒),第四个timdrpeoc是被调函数


  3. void GetLocalTime(LPSYSTEMTIME);

    得到当前日期, LP是结构体指针的前缀,也就是说参数是指针形式


二. 复选框

  1. LRESULT Button_GetCheck( HWND hwndCtl);BST_CHECKED BST_UNCHECKED

    取得复选按钮是否选中


  2. LRESULT Button_SetCheck( HWND hwndCtl, int check);BST_CHECKED BST_UNCHECKED

    设置复选按钮是否选中


三. 列表框(和组合框一样)

  1. GetDlgItem ————由对话框句柄+id 得到控件的句柄,返回HWND类型

    例如:HWND hwndCombo1 = GetDlgItem(hwnd, IDC_LIST1);

    hwndCombo1是变量名,IDC_LIST1 是控件ID(名称), 大致意思:实现把控件的句柄放到变量hwndCombo1中


  2. ListBox_AddString ————添加一项,并不是按照顺序添加项

    例如: ListBox_AddString(hwndLIST1, TEXT("河南省"));

    hwndLIST1是控件的句柄


  3. ListBox_InsertString———— 添加一项,依次向最后一项添加

    例如: ListBox_InsertString(hwndLIST1, -1, TEXT("河南省"));

    第一个参数hwndLIST1是控件的句柄,第二个参数是索引


  4. ListBox_GetCurSel————得到当前项的索引,返回int类型

    例如: int CurSel = ListBox_GetCurSel(hwndLIST1);

    hwndLIST1是控件的句柄


  5. ListBox_GetCount ————取得有多少项,返回int类型

    例如: int count = ListBox_GetCount(hwndLIST1);

    hwndLIST1是控件的句柄


  6. ListBox_DeleteString ———— 删除项

    例如: ListBox_DeleteString(hwndLIST1, 1);

    第一个参数hwndLIST1是控件的句柄,第二个参数是索引


  7. ListBox_SetCurSel———— 选择某一项

    例如:ListBox_SetCurSel(hwndLIST1, 1);

    第一个参数hwndLIST1是控件的句柄,第二个参数是索引


  8. ListBox_GetLBText ————得到某项的值,放到字符串指针中

    例如:ListBox_GetLBText(hwndLIST1, 1, str);

    第一个参数hwndLIST1是控件的句柄,第二个参数是索引,第三个参数是字符串指针


四. 菜单资源

  1. 制作好菜单资源后,在对话框的 Menu 属性中选择刚才制作好的对话框。(参考part2)


  2. 响应菜单操作。菜单点击后也会发送 WM_COMMAND 消息 id 就是被选择菜单的 id。

    例子:case ID_MENUITEMOPEN:
    //case 后边是菜单的ID


小时钟练习:

1. 控件如下:

右击标题栏,在属性窗口中改标题为小时钟

样式属性中可加上最大最小化

2. 代码如下:

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…

小时钟成品:pan-yz.chaoxing.com/share/info/…

记事本成品:pan-yz.chaoxing.com/share/info/…