【转】第六章 对话框编程(1)

阅读本文前,我们假设您已经:
      1,知道如何创建一个单文档的App Wizard
      2,知道C++ 类、函数重载等简单知识
      3,知道如何给View类或者Doc文档添加成员变量
      4,会用MFC的IDE调试工具最好,那么本文的程序您可以copy去调试
      5,知道如何为某个框架类添加虚函数或消息处理函数

 

1,动态创建按钮

 1)增加全局变量 CButton m_btn;

 2)在需要创建的地方

//ID123可以随意改变

 if(!m_btn.m_hWnd)

        m_btn.Create("维新",BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,CRect(0,0,100,100),this,123);

else

        m_btn.DestroyWindow();

2,复制控件

dlg上添加控件时,按住ctrl键,拖动就可以复制一模一样的控件

3,控件对齐

在对话框上多个控件对齐,可以用layout菜单或者左下角toolbar

4,动态编辑static静态文本框

 CString str;

 if(GetDlgItem(IDC_NUMBER1)->GetWindowText(str),str=="Number1:")

GetDlgItem(IDC_NUMBER1)->SetWindowText("数值1:");

else

GetDlgItem(IDC_NUMBER1)->SetWindowText("Number1:");

要让static静态文本框响应消息,需要复选上notify选项

5,Edit文本框

 获取/设置文本内容

 1)方法1

        char ch[10];

        GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);

        GetDlgItem(IDC_EDIT3)->SetWindowText(itoa(atoi(ch1),ch1,10));

 2)方法2

        GetDlgItemText(IDC_EDIT1,ch1,10);

        SetDlgItemText(IDC_EDIT3,itoa(atoi(ch1),ch1,10));

 3)方法3

        SetDlgItemInt(IDC_EDIT3,GetDlgItemInt(IDC_EDIT1));//对整型数字的字符串有用

 4)关联变量法

        对每个Edit控件关联一个变量,设置后记得用UpdateData()

        对于显示数字类的文本框,可以定义valuecontrol两种类型变量

 

DoDataExchange() called by the framework to exchange and validate dialog data

The framework automatically calls UpdateData with bSaveAndValidate set to FALSE when a modal dialog box is created in the default implementation of CDialog::OnInitDialog.

 5)利用WM_GETTEXT消息处理获取文本

 char ch1[10];

        可以用以下四种方法(m_edit1为关联的控制型变量)

        ::SendMessage(GetDlgItem(IDC_EDIT1)->m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);

        ::SendMessage(m_edit1.m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);

        GetDlgItem(IDC_EDIT1)->SendMessage(WM_GETTEXT,10,(LPARAM)ch1);

        m_edit1.SendMessage(WM_GETTEXT,10,(LPARAM)ch1);

 

        利用WM_SETTEXT消息处理设置文本

        m_edit3.SendMessage(WM_SETTEXT,0,(LPARAM)ch3);

 6)直接对对话框控件进行消息发送

        SendDlgItemMessage(IDC_EDIT1,WM_GETTEXT,10,(LPARAM)ch1);//获取文本

        SendDlgItemMessage(IDC_EDIT3,WM_SETTEXT,0,(LPARAM)ch3);//设置文本

        SendDlgItemMessage(IDC_EDIT3,EM_SETSEL,0,-1);

 7)利用EM_GETSEL,EM_SETSEL的消息处理

6,对话框收缩

        点击"收缩<<"对话框收缩,点击"扩展>>"则扩展, 请看例子代码

7,多个edit框用Enter键切换的方法,三种方法

 1)捕获键盘消息,在消息函数中处理(未提供)

 2)修改Edit的窗口过程:自己写窗口过程替代原来的窗口过程(比较麻烦的方法)

  (1)定义窗口过程类型变量

   WNDPROC prevProc;

  (2)定义窗口过程函数

  LRESULT CALLBACK WinSunProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam )

  {

   if(uMsg==WM_CHAR && wParam==0x0d)//如果是回车

   {

    //::SetFocus(::GetNextWindow(hwnd,GW_HWNDNEXT));//获取下一窗口句柄方法一

    //SetFocus(::GetWindow(hwnd,GW_HWNDNEXT));//方法二

    SetFocus(::GetNextDlgTabItem(::GetParent(hwnd),hwnd,FALSE));//方法三

    return 1;

   }

   else

       return prevProc(hwnd,uMsg,wParam,lParam);

  }

  (3)添加WM_INITDIALOG对应的函数

  (4)OnInitDialog中添加

   prevProc=(WNDPROC)SetWindowLong(GetDlgItem(IDC_EDIT1)->m_hWnd,GWL_WNDPROC,(LONG)WinSunProc);

  (5)注意 edit控件 MultiLine复选属性选/不选的不同

 SetWindowLong changes an attribute of the specified window.

 

  3)OnOK(default button对应的函数)

  GetFocus()->GetNextWindow()->SetFocus();//注意最后一个窗口时要判断,不然获取出错

  GetFocus()->GetWindow(GW_HWNDNEXT)->SetFocus();//注意同上

  GetNextDlgTabItem(GetFocus())->SetFocus();

  注意: 对话框初始的OKID号为IDOK,即使删除按钮(OnOk函数存在),依然会响应OnOk函数

    欢迎以任何形式转载本文,只要对您有用
    欢迎给我来信 webbery (at) sohu (dot) com (分别用@,.替换at,dot)

    韦伯主页: http://mail.ustc.edu.cn/~bywang(提供此笔记系列相关源程序下载)
    韦伯Blog: http://webbery.tianyablog.com
参考书目和网站: 
    (1)孙鑫VC++视频
    (2)1-6章主要参考: hbyufan的BLog
    (3)11-20章主要参考: songpeng的Blog

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据型 在C语言中,变量用于存储数据,数据型用于定义变量的型和范围。C语言支持多种数据型,包括基本数据型(如int、float、char等)和复合数据型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同型数据的复合数据型。结构体由多个成员组成,每个成员可以是不同的数据型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。
以下是一个简单的Python窗口编程实现学生信息管理系统的示例代码: ```python import tkinter as tk class Student: def __init__(self, name, number, gender, hometown, grade, class_, is_leader): self.name = name self.number = number self.gender = gender self.hometown = hometown self.grade = grade self.class_ = class_ self.is_leader = is_leader class StudentInfoGUI: def __init__(self, master): self.master = master master.title("学生信息管理系统") # 姓名 self.name_label = tk.Label(master, text="姓名") self.name_label.grid(row=0, column=0) self.name_entry = tk.Entry(master) self.name_entry.grid(row=0, column=1) # 学号 self.number_label = tk.Label(master, text="学号") self.number_label.grid(row=1, column=0) self.number_text = tk.StringVar() self.number_entry = tk.Entry(master, textvariable=self.number_text) self.number_entry.grid(row=1, column=1) # 籍贯 self.hometown_label = tk.Label(master, text="籍贯") self.hometown_label.grid(row=2, column=0) self.hometown_options = ["北京", "上海", "广东", "江苏", "浙江"] self.hometown_var = tk.StringVar() self.hometown_var.set(self.hometown_options[0]) self.hometown_menu = tk.OptionMenu(master, self.hometown_var, *self.hometown_options) self.hometown_menu.grid(row=2, column=1) # 年级、班级 self.grade_label = tk.Label(master, text="年级") self.grade_label.grid(row=3, column=0) self.grade_options = ["大一", "大二", "大三", "大四"] self.grade_var = tk.StringVar() self.grade_var.set(self.grade_options[0]) self.grade_menu = tk.OptionMenu(master, self.grade_var, *self.grade_options) self.grade_menu.grid(row=3, column=1) self.class_label = tk.Label(master, text="班级") self.class_label.grid(row=3, column=2) self.class_entry = tk.Entry(master) self.class_entry.grid(row=3, column=3) # 性别、是否为班长 self.gender_label = tk.Label(master, text="性别") self.gender_label.grid(row=4, column=0) self.gender_options = ["男", "女"] self.gender_var = tk.StringVar() self.gender_var.set(self.gender_options[0]) self.gender_menu = tk.OptionMenu(master, self.gender_var, *self.gender_options) self.gender_menu.grid(row=4, column=1) self.is_leader_label = tk.Label(master, text="是否为班长") self.is_leader_label.grid(row=4, column=2) self.is_leader_var = tk.BooleanVar() self.is_leader_var.set(False) self.is_leader_checkbox = tk.Checkbutton(master, variable=self.is_leader_var) self.is_leader_checkbox.grid(row=4, column=3) # 增加按钮、删除按钮 self.add_button = tk.Button(master, text="增加", command=self.add_student) self.add_button.grid(row=5, column=1) self.delete_button = tk.Button(master, text="删除", command=self.delete_student) self.delete_button.grid(row=5, column=2) # 显示框 self.display_text = tk.Text(master, height=10) self.display_text.grid(row=6, column=0, columnspan=4) # 学生照片 self.photo_label = tk.Label(master, text="学生照片") self.photo_label.grid(row=7, column=0) def add_student(self): name = self.name_entry.get() number = self.number_entry.get() gender = self.gender_var.get() hometown = self.hometown_var.get() grade = self.grade_var.get() class_ = self.class_entry.get() is_leader = self.is_leader_var.get() student = Student(name, number, gender, hometown, grade, class_, is_leader) self.display_text.insert(tk.END, f"{student.name} {student.number} {student.gender} {student.hometown} {student.grade} {student.class_} {student.is_leader}\n") def delete_student(self): self.display_text.delete('1.0', tk.END) root = tk.Tk() my_gui = StudentInfoGUI(root) root.mainloop() ``` 这个程序中,我们使用了Tkinter模块来创建一个GUI窗口,并设计了各种GUI组件来实现学生信息管理系统。在GUI中,用户可以填写学生的姓名、学号、籍贯、年级、班级、性别和是否为班长等信息,并通过“增加”按钮将这些信息添加到显示框中。用户还可以通过“删除”按钮清空显示框中的所有信息。在窗口右下角,我们还添加了一个标签来显示学生的照片。当然,这个程序只是一个简单的示例,如果你想要实现更复杂的学生信息管理系统,你需要进一步学习Python GUI编程的知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值