精华内容
下载资源
问答
  • java中创建窗体的方法发布时间:2020-06-16 11:26:04来源:亿速云阅读:102作者:Leah这篇文章给大家分享的是有关java中创建窗体的方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所...

    java中创建窗体的方法

    发布时间:2020-06-16 11:26:04

    来源:亿速云

    阅读:102

    作者:Leah

    这篇文章给大家分享的是有关java中创建窗体的方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获。

    首先,我们看一下窗体都有哪些要素,以windows下的【记事本】为例:我们新建一个记事本,会看到标题,大小,位置,关闭方式

    a82ea2d90eabbaaf923b25941094c308.png

    所以我们用代码创建一个窗体,也需要这些要素,前提:在Java中创建窗体,我们需要继承【JFrame】类,导入JFrame包

    4506f07b615c2f8a05ea6b0695692ca1.png

    第二步,我们给窗体设置标题(PS:对窗体的一些设置,最好写在构造方法里,养成良好的习惯),设置标题使用setTitle()方法

    661a75d2f0283466308703b0f40e8336.png

    第三步,给窗体设置大小和位置,我们可以使用setBounds()【setBounds()传入4个参数,前两个是窗体的位置,后两个是窗体的 大小】,将大小和位置一起设置,也可以使用setLocation()设置窗体的位置,使用setSize()设置窗体的大小

    注意:窗体的位置,是以电脑屏幕左上角为原点(0,0)的坐标系

    97eff88677505ae5eab3c3e2aba7ccd9.png

    第四步,设置窗体的关闭方式,使用setDefaultCloseOperation()

    d02ea56678146b9dd6c6efda328b23b9.png

    最后一步,也是特别重要的,我们虽然上面创建好窗体了,但是我们并没有设置让窗体【显示】,所以你现在运行程序,窗体是显示不出来的,我们还需要加一句setVisible(),传入的参数为true;

    60c4d16a49374699d1b49ad53a04a4bb.png

    我们补全程序,加上main()方法,完成!

    f1f68d22ff8a1582b8d039e5e14169d4.png

    到此为止, 关于java中创建窗体的方法有了一个基础的认识, 但是对于具体的使用方法还是需要多加巩固和练习,如果想了解更多相关内容,请关注亿速云行业资讯。

    展开全文
  • 一、手动编写界面代码 Qt编程中所使用语言是面向对象C++,在初学GUI编程时,如果仅仅依靠Qt Designer编辑器来通过拖拽一些widget来设计界面,则会很容易迷惑我们,并且...1、组合widget方法 顾名思义,组合widget方

    一、手动编写界面代码

    Qt编程中所使用的语言是面向对象的C++,在初学GUI编程时,如果仅仅依靠Qt Designer编辑器来通过拖拽一些widget来设计界面,则会很容易迷惑我们,并且很难弄懂其中所涉及的面向对象思想,也不容易弄懂Qt GUI的一个整体结构。所以在初学Qt GUI时可以通过手动编写界面代码来理解Qt 的GUI结构。

    1、组合widget方法

    顾名思义,组合widget方法是通过将一些控件进行组合,形成一个主窗口。在这种方法中,首先是从Qt的GUI类库中选择一个类作为主窗口的基类,如QDialog、QWidget、QMainWindow等类中选择。以QDialog类为例,以对话框类为主窗口,然后再添加需要的其它控件类成员,可以通过布局的方式将其它控件进行布局,再将最终的布局作为主窗口对话框的布局。下面以一个简单的对话框为例,相关代码如下:
    1. #include <QtGui/QApplication>  
    2. #include <QHBoxLayout>  //布局管理器  
    3. #include <QSlider>  
    4. #include <QSpinBox>  
    5. #include <QDialog>  
    6.   
    7.   
    8. int main(int argc, char *argv[])  
    9. {  
    10.     QApplication a(argc, argv);  
    11.   
    12.     QDialog *window = new QDialog;  
    13.     window->setWindowTitle("Enter your Age");  
    14.   
    15.     QSpinBox *spinBox = new QSpinBox;  
    16.     QSlider *slider = new QSlider(Qt::Horizontal);  //水平  
    17.     spinBox->setRange(0,130);  
    18.     slider->setRange(0,130);  
    19.   
    20.     QObject::connect(spinBox,SIGNAL(valueChanged(int)),slider,SLOT(setValue(int)));  
    21.     QObject::connect(slider,SIGNAL(valueChanged(int)),spinBox,SLOT(setValue(int)));  
    22.   
    23.     QHBoxLayout *layout = new QHBoxLayout;  
    24.     layout->addWidget(spinBox);  
    25.     layout->addWidget(slider);  
    26.     window->setLayout(layout);  
    27.   
    28.     window->show();  
    29.       
    30.     return a.exec();  
    31. }  
    运行结果如下,一个对话框为主窗口,在其中添加一个slider和spinBox类,并将其进行横向布局,再将布局添加到主窗口中。

    Qt中主要有三个主要的布局管理器:

    QHBoxLayout:在水平方向上排列窗口部件,从左到右(一般情况下)。
    QVBoxLayout:在竖直方向上排列窗口部件,从上到下。
    QGridLayout:把各个窗口部件排列在一个网格中。

    2、子类化widget方法

    组合widget的方法属于面向过程的方法,当程序的规模逐渐变大时,使用这种方法会使得代码量太多,结构混杂,不利于阅读。既然是使用C++语言,使用面向对象的方法肯定是最好的选择。子类化widget的方法即为创建一个新类,这个新类就相当于一个新窗口,可以是主窗口,也可以是需要的一些对话框或窗口部分,可以继承于一些主窗口类,如QDialog、QMainWindow类等,然后将该窗口中所需要的控件类作为成员对象添加进去,然后就可以之间通过实例化该类便可以创建一个包含了一系列控件的小窗口了。还是以上述例子为例,用子类化的方法实现:相关代码如下:
    头文件head.h
    1. <span style="font-weight: normal;"><span style="font-size:14px;">#define HEAD_H  
    2.   
    3. #include <QDialog>  
    4. class QSpinBox;  
    5. class QSlider;  
    6.   
    7. class test:public QDialog  
    8. {  
    9.     Q_OBJECT  
    10. public:  
    11.     test(QWidget *parent = 0);  
    12. private:  
    13.     QSpinBox *spinBox;  
    14.     QSlider *slider;  
    15.   
    16. };</span></span>  
    实现文件test.cpp
    1. <span style="font-weight: normal;"><span style="font-size:14px;">#include "head.h"</span></span>  
    2. <span style="font-weight: normal;"><span style="font-size:14px;">test::test(QWidget *parent):QDialog(parent)  
    3. {  
    4.     spinBox = new QSpinBox;  
    5.     slider = new QSlider(Qt::Horizontal);  //水平  
    6.     spinBox->setRange(0,130);  
    7.     slider->setRange(0,130);  
    8.   
    9.     QObject::connect(spinBox,SIGNAL(valueChanged(int)),slider,SLOT(setValue(int)));  
    10.     QObject::connect(slider,SIGNAL(valueChanged(int)),spinBox,SLOT(setValue(int)));  
    11.   
    12.     QHBoxLayout *layout = new QHBoxLayout;  
    13.     layout->addWidget(spinBox);  
    14.     layout->addWidget(slider);  
    15.     setLayout(layout);  
    16. }</span></span>  
    主函数文件main.cpp
    1. <span style="font-weight: normal;"><span style="font-size:14px;">#include <QHBoxLayout>  //布局管理器  
    2. #include <QSlider>  
    3. #include <QSpinBox>  
    4. #include <QDialog>  
    5. #include "head.h"  
    6.   
    7. int main(int argc, char *argv[])  
    8. {  
    9.     QApplication a(argc, argv);  
    10.   
    11.     test *window = new test;  
    12.     window->show();  
    13.       
    14.     return a.exec();  
    15. }</span></span>  
    结果


    二、利用Qt Disigner设计界面

    使用代码编写的方式来设计界面往往比较麻烦,而且需要修改的时候往往比较麻烦。这个时候可以使用Qt Designer编辑器来编辑界面。主要的实现方式是:首先在项目中创建一个界面ui文件,通过拖拽控件的方式画好自己的界面,设置各个widget的属性。然后我们怎么将这个ui文件使用到项目中去呢?在进行qmake之后,会自动检测到项目中的ui文件并且可以生成适当的makefile文件,makefile文件会调用Qt的用户界面编译器(User interface compiler,uic),uic会将ui文件转换成C++文件,转换结果存放在ui_[ui文件名].h中。这个头文件其实就类似于第一点中所说的子类化widget的类定义头文件,只是这里的类是根据用户所设计的界面自动生成的,即这个头文件中主要包含ui文件的类声明和界面中所使用到的一些控件的声明,以及一个用于初始化窗体的setupUi()函数。还是以第一点中所使用的例子来说明一下,过程如下:
    首先我们使用Qt Designer编辑器来设计界面如下:

    执行之后我们发现项目文件中会生成一个名为ui_test.h的头文件,部分代码如下:

    我们可以发现ui_test.h头文件中主要是一个类Ui_test的声明,以及一个控件的声明等,这里面的内容即为我们在Qt Designer中所设计的界面。类似于我们通过拖拽控件的方式完成了子类化widget。
    接下来我们要做的事情就是通过继承我们所设计的类Ui_test来创建窗口。
    先在头文件中继承类Ui_test,代码如下:(注意下面继承的类名叫做Ui:test而非Ui::Ui_test的原因是ui_test.h中已将其继承为test类了,具体查看头文件中的代码)
    test2.h
    1. <span style="font-size:14px;">#define TEST2_H  
    2.   
    3. #include <QDialog>  
    4. #include "ui_test.h"  
    5.   
    6. class test2:public QDialog,public Ui::test    
    7. {  
    8.     Q_OBJECT  
    9. public:  
    10.     test2(QWidget *parent = 0);  
    11.     ~test2();  
    12. };</span><span style="font-size: 18px;">  
    13. </span>  
    然后在源文件中实现:
    1. test2::test2(QWidget *parent):QDialog(parent)  
    2. {  
    3.     setupUi(this);  
    4.   
    5.     spinBox->setRange(0,130);  
    6.     slider->setRange(0,130);  
    7.   
    8.     QObject::connect(spinBox,SIGNAL(valueChanged(int)),slider,SLOT(setValue(int)));  
    9.     QObject::connect(slider,SIGNAL(valueChanged(int)),spinBox,SLOT(setValue(int)));  
    10. }  
    11. test2::~test2()  
    12. {  
    13.   
    14. }  
    主函数文件:
    1. #include "test2.h"  
    2.   
    3. int main(int argc, char *argv[])  
    4. {  
    5.     QApplication a(argc, argv);  
    6.   
    7.     test2 *window = new test2;  
    8.     window->show();  
    9.       
    10.     return a.exec();  
    11. }  
    运行结果如下:


    PS:在做这个简单的实验过程中,我还是出现了一点小问题,解决了,还是拿出来跟大家分享一下,如果有同学出现同样的错误就不用在纠结了。
    错误提示是:expected class-name before '{' token
    错误的位置是在类定义处:
    1. class test2:public QDialog,public Ui::Ui_test  
    修改后为
    1. <span style="font-size:14px;">class test2:public QDialog,public Ui::test</span>  
    主要原因是虽然ui_test.h中自动生成的类名为Ui_test,但是没有看到后面还有一段代码如下:
    1. <span style="font-size:14px;">namespace Ui {  
    2.     class test: public Ui_test {};  
    3. // namespace Ui</span>  
    定义了一个名为Ui的命名空间,其中已经对Ui_test进行了继承了的类test在其中。如果我们不使用命名空间Ui的话也可以改为:
    1. class test2:public QDialog,public Ui_test  
    但是一般推荐第一种改法,因为使用Qt界面设计器进行设计窗口的时候经常设计到的类名很容易相同混淆,使用Ui命名空间可以将关于设计界面自动生成的窗口类放在一个空间内比较好。
    展开全文
  • 创建窗体

    千次阅读 2010-05-23 00:16:00
    第一讲 用Create()方法新建一个窗体应用程序 一般来讲,大多数windows... 我们一般可以通过CFreameWnd类中Create()方法创建一个窗体,Create()函数定义如下:BOOL Create(LPCTSTR lpszClassName, LPCTSTR l

    第一讲 用Create()方法新建一个窗体应用程序

      一般来讲,大多数windows应用程序的界面都是由一个或数个窗体构成。
    而VC++中提供了丰富的类库,用于创建Windows窗体应用程序。
      我们一般可以通过CFreameWnd类中的Create()方法来创建一个窗体,Create()
    函数的定义如下:

    BOOL Create(LPCTSTR lpszClassName,
     LPCTSTR lpszWindowName,
     D
    word dwStyle = WS_OVERLAPPEDWINDOW,
     const RECT& rect = rectDefault,
     CWnd* pParentWnd = NULL,  // != NULL for popups
     LPCTSTR lpszMenuName = NULL,
     DWORD dwExStyle = 0,
     CCreateContext* pContext = NULL);


      这是一个虚函数①,第一个参数lpszClassName是一个窗体类名字符串的指针
    (一个WNDCLASS②结构体)。此类名可以是任意的由全局函数AfxRegisterWndClass
    注册过的预定义
    控件类名。如果为空,则使用CWnd类的默认属性。第二个参数
    lpszWindowName是作为窗体标题的字符串指针。
      第三个参数dwStyle是宏定义的窗体类型,具体定义如下:

    WS_BORDER 创建一个有边框的窗体。

    WS_CAPTION 创建一个有标题栏的窗体(隐含了WS_BORDER). 不能和WS_DLGFRAME
     一起使用.

    WS_CHILD 创建一个子窗体。不能和WS_POPUP一起使用。

    WS_CLIPCHILDREN 不包括在父窗体中被子窗体占用的区域。用于创建父窗体。

    WS_CLIPSIBLINGS 使子窗体彼此别住;就是当一个指定的子窗体接收到一个
     paint消息时,WS_CLIPSIBLINGS类型将别住所有重叠的子窗
     体超过区域的部分一起
    更新,(如果没有使用WS_CLIPSIBLINGS
     并且子窗体重叠,当你在一个子窗体的客户区绘图时,可能
     会绘图到邻近的子窗体的客户区。)只与WS_CHILD一起使用。

    WS_DISABLED 创建一个初始不可用的窗体。

    WS_DLGFRAME 创建一个有双边但无标题的窗体。

    WS_GROUP 指定一个用户可以用方向键从一个控件移到另一个控件的控
     件组的第一个控件。All controls defined with the WS_GROUP
     style FALSE after the first control belong to the same
     group. The next control with the WS_GROUP style starts
     the next group (that is, one group ends where the next
     begins).

    WS_HSCROLL 创建一个带水平滚动条的窗体。

    WS_MAXIMIZE 创建一个最大尺寸的窗体。

    WS_MAXIMIZEBOX 创建一个有最大化按扭的窗体。

    WS_MINIMIZE 创建一个初始最小化的窗体。只与WS_OVERLAPPED一起使用。

    WS_MINIMIZEBOX 创建一个有最小化按扭的窗体。

    WS_OVERLAPPED 创建一个重叠窗体。一个重叠窗体一般有标题和边框。

    WS_OVERLAPPEDWINDOW 创建一个和WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU,
     WS_THICKFRAME, WS_MINIMIZEBOX, and WS_MAXIMIZEBOX一
     使用的重叠窗体。

    WS_POPUP 创建一个弹出式窗体。不能和WS_CHILD一起使用。

    WS_POPUPWINDOW 创建一个和WS_BORDER, WS_POPUP, and WS_SYSMENU一起使
     用的弹出式窗体。WS_CAPTION必须和WS_POPUPWINDOW组合使
     用才能让控件菜单可见。

    WS_SYSMENU 创建一个在标题栏有控件菜单框的窗体。只能和有标题栏的
     窗体一起使用。

    WS_TABSTOP 指定任意数量控件中的一个可以由用户使用TAB键移动到的
     控件。TAB键使用户移动到由WS_TABSTOP指定的下一个控件。

    WS_THICKFRAME 创建一个有厚边框的Window,使其可以改变大小。

    WS_VISIBLE 创建一个初始可见的窗体。

    WS_VSCROLL 创建一个有垂直滚动条的窗体。

      由于上表中常量可以进行组合,用按位或运算,所以常量名的值被定义为类似于
    0x00C00000L的32位16进制数型式。例如进行WS_SYSMENU|WS_MINIMIZEBOX运算时即
    0x00080000L|0x00020000L。数字前面的0x是16位数的标识符,L表示32位,上式的演
    算式可表示如下:

    =
     00000000000010000000000000000000
      (|) 00000000000000100000000000000000
    ------------------------------------------
      00000000000010100000000000000000  =  0X000A0000L = 655360;

      当你用十进制数655360替代WS_SYSMENU|WS_MINIMIZEBOX作为实参时,你会看到相
    同的结果。

      第四个参数rect是一个RECT结构体的对象,用于指定窗体的尺寸和位置。RECT结
    构体的定义如下:

    typedef struct tagRECT
    {
      LONG  left;
      LONG  top;
      LONG  right;
      LONG  bottom;
    } RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;

      我们可以利用从tagRECT结构体派生出的CRect类的构造函数来初始化一个RECT结构
    体。CRect的一个重载构造函数定义如下:

    // from left, top, right, and bottom
    CRect(int l, int t, int r, int b);


      第五个参数pParentWnd用于指定父窗体,这是一个指向CWnd类对象的指针。第六
    个参数nID用于指定作为子窗体的窗体ID。最后一个参数是关于创建内容的指针,已
    被默认为NULL,不用理会。


    注释:

    ① 虚函数的作用:如果没有把需要在派生类中重载的同名
    基类函数定义为虚函数,则当用基类定义的指针指向派生类对象的地址时(赋
    值兼容规则),通过此指针
    调用的该同名函数是在基类中定义的;反之如果定
    义的虚函数,则通过指针调用的该同名函数是在指针指向的对象中定义的。

     

    第二讲 Create()方法的应用

    下面是一个用CFrameWnd类的Create()函数创建一个窗体的例子:

    /
    #include <afxwin.h>

    class CMyWnd:public CFrameWnd
    {
    public:
     CMyWnd()
     {
     Create(AfxRegisterWndClass(CS_
    dbLCLKS,0,HBRUSH(COLOR_WINDOWFRAME),AfxGetApp()->LoadStandardIcon(IDI_APPLICATION)),__T("Creamdog"),WS_SYSMENU,CRect(100, 100, 500, 500),this,NULL);
     ShowWindow(SW_SHOWNORMAL);
     };
    };

    class CMyApp:public CWinApp
    {
    public:
     virtual BOOL InitInstance()
     {
     m_pMainWnd=new CMyWnd;
     return TRUE;
     };
    };

    CMyApp myApp;
    /

      首先从其类CFrame中派生出CMyWnd类,并定义构造函数,用于生成一个新窗体。
    在构造函数中是使用Creat()函数创建窗体的,其中
    系统全局函数AfxRegisterWndClass()
    用于注册一个窗体类,该函数的具体定义如下:

    LPCTSTR AFXapi AfxRegisterWndClass(UINT nClassStyle, HCURSOR hCursor = 0, HBRUSH hbrBackground = 0, HICON hIcon = 0);

      第一个参数nClassStyle指定了窗体类的类型,如果为NULL则所有参数都使用
    默认值。具体默认值为:

    nClassStyle=CS_DBLCLKS;//响应双击事件
    hCursor=IDC_ARROW;//标准箭头
    hbrBackground=Null;//不更新背景
    hIcon=IDI_APPLICATION;//Windows徽标(在
    winxp中为小窗口)

      由于用默认值时窗体不会更新,一般函数的四个参数需要人为指定,第一个参数
    设为为CS_DBLCLKS即可。CS_DBLCLKS是窗体类型的一个宏定义,下表列出了所有窗体
    类型的宏定义。

    CS_BYTEALIGNCLIENT 在字节边界(在X方向)上对齐窗体的客户区。此类型将影
     响到在窗体显示时它的宽度和它的水平位置。

    CS_BYTEALIGNWINDOW 在字节边界(在X方向)上对齐窗体。此类型将影响到在窗
     体显示时它的宽度和它的水平位置。

    CS_CLASSDC 分配一个设备环境并被类中的所有窗体共享。由于窗体类
     被处理特化,它是可以适用于一个应用程序的若干线程创
     建一个相同类的窗体。它同样适用于多个线程试图同时使
     用相同的设备环境。当此种情况发生时,系统只允许一个
     线程去成功的它的绘图操作。

    CS_DBLCLKS 当指针在属于此类的窗体内部,并且用户双击鼠标时,将
     会发送一个双击消息到窗体程序。

    CS_GLOBALCLASS 指定此窗体类是一个应用程序全局类。应用程序全局类是
     由一个在进程中对所有模块有效的exe或ddl注册的一个窗
     体类。

    CS_HREDRAW 如果窗体被移动或尺寸调整器改变了客户区的大小,重绘
     全部的窗体。

    CS_NOCLOSE 关闭按扭不可用。

    CS_OWNDC 为此类中的每一个窗体分配唯一的设备环境。

    CS_PARENTDC 设置子窗体中剪下的矩形到父窗体中,以使子窗全可以在父
     窗体上绘图。一个具有CS_PARENTDC属性控制的窗体从设备
     环境的系统缓存中接收到一个规则的设备环境。它不把父窗
     体的设备环境或设备环境设置给予子窗体。指定CS_PARENTDC
     以提高应用程序的
    性能

    CS_SAVEBITS 保存被此类的一个窗体摭住的屏幕图象的一部分为位图。当
     窗体被移动,系统使用保存过的位图去恢复屏幕图象,包括
     其它被摭住的窗体。因此如果被位图使用
    内存没有被释放,
     并且其它的屏幕动作没有使储存的图像无效。系统不会发送
     WM_PAINT消息到被摭盖的窗体。
     这种类型对在其它屏幕动作发生时被暂时显示小窗体(如菜
     单或对话框)很有用。这种类型增加了显示窗体所需的时间,
     因为系统必须先分配内存去
    存储位图。
     
    CS_VREDRAW 如果窗体被移动或尺寸调整器改变了客户区的高度,重绘
     全部的窗体。

      上表中的宏定义值是类似于0x0080的16位16进制数,因此它们之间可以用按位
    或 | 符号进行组合,原理前面以经介绍过了。

      第二个参数hCursor为鼠标指针的句柄,但由于在窗体打开事件发生时,光标就
    会被重绘为箭头,因此在注册窗体类时对此进行设置意义不大,设为0即可。如果需
    要定义光标,首先应关闭数标重绘,方法是:重载窗体类基类的OnSetCursor()函数,
    让其返回TRUE值,这样当重绘时调用OnSetCursor()函就不起作用了。可以用下面的
    语句进行设置。

    SetCursor(AfxGetMainWnd()->LoadStandardCursor(IDC_IBEAM));

      其中::SetCursor()是全局函数,用来设置整个例程的光标参数是宏定义光标句
    柄。AfxGetMainWnd()是一个系统函数,它返回当前主窗体的句柄。而CWinApp的
    LoadStandardCursor()成员函数用来读取一个系统指针,每一种系统指针的具体宏
    定义如下:

    IDC_APPSTARTING 带小沙漏的标准箭头
    IDC_ARROW 标准箭头
    IDC_CROSS 十字光标(用于定位)
    IDC_HAND 
    Windows 2000:手型
    IDC_HELP 带问号的箭头
    IDC_IBEAM I型标
    IDC_ICON Obsolete for applications marked version 4.0 or later.
    IDC_NO 禁止符号
    IDC_SIZE Obsolete for applications marked version 4.0 or later. Use IDC_SIZEALL.
    IDC_SIZEALL 十字箭头
    IDC_SIZENESW 指向东北和西南的双向箭头
    IDC_SIZENS 指向南和北的双向箭头
    IDC_SIZENWSE 指向西北和东南的双向箭头
    IDC_SIZEWE 指向东西的双向箭头
    IDC_UPARROW 上箭头
    IDC_WAIT 沙漏

      上表中宏定义值为类似于MAKEINTREsource(32649)的函数,MAKEINTRESOURCE()的
    定义如下:

    #define MAKEINTRESOURCEW(i) (LPWSTR)((DWORD)((WORD)(i)))  //UNICODE
    #define MAKEINTRESOURCE  MAKEINTRESOURCEW

      将其还原为容易理解的C代码:

    char *(unsigned long(unsigned short(32649))
      至于为什么系统要将其倒来倒去,是为了在重载函数中和一般的整形实参相区
    别(本人估计)。另外,如果想要使用自定义图标或指针
    文件,则牵扯到实例资源
    分配的问题,将在以后进行说明。

      第三个参数hbrBackground,指定窗体背景的画笔资源,应该指定一个,否则
    背景将不会更新。此参数可使用系统颜色,定义如下:

    COLOR_SCROLLBAR 0
    COLOR_BACKGROUND 1
    COLOR_ACTIVECAPTION 2
    COLOR_INACTIVECAPTION 3
    COLOR_MENU 4
    COLOR_WINDOW 5
    COLOR_WINDOWFRAME 6
    COLOR_MENUTEXT   7
    COLOR_WINDOWTEXT 8
    COLOR_CAPTIONTEXT 9
    COLOR_ACTIVEBORDER 10
    COLOR_INACTIVEBORDER 11
    COLOR_APPWORKSPACE 12
    COLOR_HIGHLIGHT 13
    COLOR_HIGHLIGHTTEXT 14
    COLOR_BTNFACE 15
    COLOR_BTNSHADOW 16
    COLOR_GRAYTEXT 17
    COLOR_BTNTEXT 18
    COLOR_INACTIVECAPTIONTEXT 19
    COLOR_BTNHIGHLIGHT 20

      第四个参数为程序图标的标识符,为0时是默认的Windows徽标。与光标同样,
    需要自定义图标时,添加设置图标的语句,例如:

    AfxGetMainWnd()->SetIcon(AfxGetApp()->LoadStandardIcon(IDI_EXCLAMATION),FALSE);

      与设置光标不同的是,设置光标的函数是全局函数,而设置图标的函数是
    CWinApp类的成员函数(因为图标只在窗体内有效),故在函数调用之前需要用系
    统函数AfxGetMainWnd()来获取当前主窗体的句柄,再用CWinApp的LoadStandardIcon()
    成员函数来读取系统图标并返回一个图标的句柄,最后CFrameWnd类的SetIcon()
    成员函数将窗体的图标设置为刚才返回的图标句柄。

      回到刚才的Create()语句,第一个参数用的是刚才注册的类名。第二个参数中
    用到了强制类型转换(__T),这个数据类型不对字符串做任何的改变,只是起到规
    范化
    编程的做用。第三个参数是前面提过的窗体类型,WS_SYSMENU是使窗体具有最
    大化、最小化、关闭三个按扭。第四个参数使窗体在所给出的位置和尺寸上打开。
    第五个参数this的意义是此窗体为父窗体。第六个参数表示无子窗体。
      ShowWindow()故名思意,即显示窗体。其参数nCmdShow是确定窗体被怎样显示。
    它必须是下面宏定义中的一个:

    SW_Hide 0 隐藏此窗体并激活其它窗体。

    SW_MAXIMIZE 3 激活并显示此窗体为最大化。

    SW_MINIMIZE 6 最小化指定的窗体并激活下一个在Z顺序中位
     于顶层的窗体。

    SW_RESTORE 9 激活并显示此窗体。如果此窗体已被最大化或
     最小化,系统将恢复此窗体至原尺寸和原位置。
     一个应用程序应该在恢复一个最小化窗体时指
     定这个标记。

    SW_SHOW 5 在当前尺寸和位置上激活并显示此窗体。

    SW_SHOWMAXIMIZED 3 同SW_MAXIMIZE

    SW_SHOWMINIMIZED 2 激活并显示此窗体为最小化。

    SW_SHOWMINNOACTIVE 7 显示此窗体为最小化。这个值类似于SW_SHOWMINIMIZED,
     除非窗体未被激活。
    SW_SHOWNA 8 在最近一次的尺寸和位置显示此窗体,这个值
     类似于SW_SHOWNORMAL,除非窗体未被激活。

    SW_SHOWNOACTIVATE 4 在当前的尺寸和位置显示此窗体。这个值类似于SW_SHOW,
     除非窗体未被激活。

    SW_SHOWNORMAL 1 激活并显示一个窗体。如果此窗体已被最大化
     或最小化,系统将恢复此窗体至原尺寸和原位置。
     一个应用程序应该在第一次打开这个窗体时指定
     这个标记。

      有关窗体框架的定义就结束了,下面是由CWinApp基类派生出的类CMyApp,在
    类定义中对基类中的虚成员函数InitInstance()进行了重载,关于虚函数的有关概
    念前面以经提过了。在开始说明此函数内部的语句时首先需要对CWinApp的数据成员
    m_pMainWnd进行说明。
      m_pMainWnd数据成员被用于储存一个指向你的线程中主窗体对向的指针。当涉
    及到m_pMainWnd的窗体被关闭时,MFC库将自动的终止你的线程。如果此线程为你的
    应用程序中的主线程,应用程序也将同样被终止。如果此数据成员为NULL,当终止
    此线程时,为了应用程序的CWinApp对象的主窗体也将常常被终止。m_pMainWnd是
    CWnd类指针的一个公有变量。
      一般来讲,当你重载InitInstance()函数时设置此变量。在一个工作线程中,
    此数据成员的值是从它的父线程中继承来的。
      正如上面所说,例子中在重载InitInstance()函数时对此变量进行了赋值,让
    它指向一个新的框架窗体类对象,而这个对象是由刚才定义的派生类CMyWnd实例化
    出来的。下来返回一个真值,表示初始化实例成功。
      最后,用CMyApp类实例化出一个对象,名子随意。系统将对前面定义的类和函
    进行构造,这样就完成了一个简单窗体的创建。

    展开全文
  • 数据表是用来存储数据库数据的重要对象, 是查询、 报表等对象的数据来源, 是 Access 数据库中最重要、 最基本的...今天,就给大家分享几种在Access中创建数据表的方法,以帮助我们快速创建出需要的数据表。1.使用...

    数据表是用来存储数据库数据的重要对象, 是查询、 报表等对象的数据来源, 是 Access 数据库中最重要、 最基本的对象, 也是其他 5 种对象的基础。

    表是整个数据库最基本的组成单位, 表结构设计得好坏与否直接影响到数据库的性能, 所以, 设计一个结构和关系良好的数据表是数据库系统开发中重要的环节。

    今天,就给大家分享几种在Access中创建数据表的方法,以帮助我们快速创建出需要的数据表。

    1.使用表模板创建数据表

    如果需要创建常用的联系人、 任务等数据表, 使用系统提供的模板比手动创建更加快捷。

    下面以在 Access2016 中创建联系人列表为例, 介绍使用表模板创建数据表的方法。

    Step 01 创建一个空白数据库,单击【创建】 选项卡【模板】 组中的【应用程序部件】 下拉按钮,在弹出的下拉列表中选择【联系人】 选项,如下图所示。

    f803eee3940a9d9cf193a4458b3458d2.png

    Step 02 弹出提示对话框, 提示安装此应用程序部件之前必须关闭所有打开的对象, 单击【是】 按钮, 如下图所示。

    249afdb76b38eb941f5784ec188ca3fb.png

    Step 03 操作完成后即可创建联系人表, 双击【联系人】 表, 即可进入该表的数据表视图界面, 如下图所示。

    22f0bc904f76cc9cdd0bc502da96bf4b.png

    技术看板

    使用【联系人】 模板创建数据表的同时, 还会同时创建查询、 窗体和报表。

    2.使用数据表视图创建数据表

    在数据表视图中创建表是最常用的创建方法, 具体操作步骤如下。

    Step 01 创建一个空白数据库, 单击【创建】选项卡【表格】组中的【表】按钮,如下图所示。

    312a60ba7e4628c62a1857fc50496f40.png

    Step 02 此时将新建一个名为【表 1】的空白数据表, 并自动进入该表的数据表视图, 如下图所示。

    2fd035785613e8e31c27f4639bbf4279.png

    Step 03在表中单击【单击以添加】下拉按钮,在弹出的下拉菜单中选择一种字段的数据类型, 如【短文本】, 如下图所示。

    fcd09b6462f685d6ffee523bf63e8160.png

    Step 04 此时, 在表中将添加一个名为【字段 1】 的字段, 且该字段名称处于可编辑状态, 如下图所示。

    de3778e2d78c89ab8ee3897b4cb91b6e.png

    Step 05 在【字段 1】 文本框中输入新名称, 如"姓名", 然后按【Enter】键即可, 如下图所示。

    0ac3b8ddcbf7be935f1899a59c3938e6.png

    Step 06 使用相同的方法添加其他字段, 并更改字段名称,完成后单击快速访问工具栏中的【保存】 按钮 , 如下图所示。

    19aa5204a9f366daf066b436fa880fd4.png

    Step 07 弹出【另存为】对话框,在【表名称】 文本框中输入表名称,单击【确定】按钮,如下图所示。

    ecc207152db948c40d9790f85086fc1b.png

    Step 08 操作完成后, 即可在数据库中创建一个【员工信息表】, 如下图所示。

    f36433d3a57b99e5708552484a3708aa.png

    3.使用设计视图创建数据表

    在设计视图中创建数据表时,用户不仅可以设置字段名称和数据类型, 还可以设置属性, 具体操作步骤如下。

    Step 01 在数据库中单击【创建】 选项卡【表格】 组中的【表设计】 按钮,如下图所示。

    098f9acfb293887efe35c03c546338ec.png

    Step 02 此时将新建一个名为【表 1】的空白数据表, 并自动进入该表的设计视图, 如下图所示。

    91584ecb8c8b913cc3c5270d44e92051.png

    Step 03 在【字段名称】 列中输入字段名, 如"工号",在【数据类型】列中选择一种数据类型, 如【数字】,如下图所示。

    ab8e818630d47a35f8a3e3ea8bad7e95.png

    Step 04 在【说明(可选)】 列中可以输入说明性文字, 如下图所示。

    aa797b63b9a819857a1990b1fb78f979.png

    技术看板

    【说明(可选)】 列中的内容属于可选内容,可以输入,也可以不输入。

    Step 05 使用相同的方法, 在表中添加其他字段, 完成后单击快速访问工具栏中的【保存】 按钮 , 如下图 所示。

    98a6f29b85d9b76887cc9c5f621db5a6.png

    Step 06 弹出【另存为】对话框,在【表名称】 文本框中输入表名称, 单击【确定】 按钮, 如下图所示。

    317454fecf7c95cbac72638da7359dac.png

    Step 07 弹出提示对话框, 提示尚未定义主键, 此处暂时不定义主键, 单击【否】 按钮, 如下图所示。

    70e52d6577a03558c2a3b02e7e6db6de.png

    Step 08 操作完成后, 即可在数据库中创建一个【员工考勤表】,单击【开始】 选项卡【视图】 组中的【视图】下拉按钮, 在弹出的下拉菜单中选择【数据表视图】 选项, 如下图所示。

    57ded6653481d853623a3a6fe521fff0.png

    Step 09 操作完成后, 即可看到新建数据表的数据表视图模式, 如下图所示。

    81d49943a05afd1f6d2acd5a70bc9a97.png
    展开全文
  • 在子网格中开启快速创建窗体的方法很简单,把lookup关联字段属性设置为业务必须,在实体属性界面开启快速创建,自定义实体如果没有快速创建窗体新建一个即可,完成上诉步骤后,点击子网格上的加号即可打开实体快速...
  • 实现的主要思路是创建一个子窗体的父类并在类中声明一个委托,当父窗体调用子窗体时绑定显示Panel的方法。如下: 1.新建一个项目,分别添加MainForm、BaseChildForm两个窗体,其中MainForm的IsMdiContain...
  • //动态创建窗体和释放窗体{在Delphi中窗体是TForm类子类,在程序运行过程中,可以动态创建这个类实例对象。首先声明一个窗口对象,然后调用TForm类Create方法创建对象。Constructor Create(AOwner:TComponent)...
  • 一般而言,在传统VB6中父子窗体(诸如“闪屏”窗体是“父窗体”加载内容,然后启动自动关闭,启动主窗体,是子窗体...现在你突然间关闭了“闪屏”窗体,意味着创建这个“主窗体UI线程被终止,自然属于这个
  • vc创建窗体

    千次阅读 2008-10-07 10:22:00
    开始VC之路--创建窗体 第一讲 用Create()方法新建一个窗体应用程序 一般来讲,大多数Windows应用程序界面都是由一个或数个窗体构成。而VC++中提供了丰富类库,用于创建Windows窗体应用程序。 我们一般可以...
  • 方法1使用activator方法创建实例 dim str as string str = "form2" 必须是 命名空间+点+窗体类名(这里假设为命名空间为空) dim tempassembly as [assembly] = [assembly].getexecutingassembly()
  • 本文实例讲述了MFC 绘制不规则窗体的方法。分享给大家供大家参考。具体分析如下: 实现过程: 1、首先创建基于DLG的MFC应用程序,命名为:tryBGDlg,并将DLG的属性设置为:Title Bar :False ,其它设置不变 2、制作...
  • 方法1使用activator方法创建实例 Dim str As String str = "Form2" ´必须是 命名空间+点+窗体类名(这里假设为命名空间为空) Dim tempAssembly As [Assembly] = [Assembly].GetExecutingAssembly()
  • 方法1使用activator方法创建实例 Dim str As String str = "Form2" '必须是 命名空间+点+窗体类名(这里假设为命名空间为空) Dim tempAssembly As [Assembly] = [Assembly]....
  • vue-electron项目中 ** 无边框窗体 ** 多窗体 如何在主进程里判断当前点击是那个窗体?..._**或者**_ 有其他方式方法可以单独操作 **无窗体边框** 最大化 最小化 关闭 而不影响到其他页面呢?
  • 用DELPHI创建DLL文件,封装窗体的实现方法实例: 即一个程序不再是单一的一个EXE文件了,而是由一个EXE文件加N个DLL文件组成,这样做的原因是方便以后的维护与更新,也是跨平台开发的重要一步。 1, 打开DELPHI,...
  • Qt创建窗体的过程

    2013-01-04 00:20:24
    前言:分析Qt的代码也有一段时间了,以前在进行QT源码解析的时候总是使用ue,一个函数名在QTDIR/src目录下反复的查找,然后分析函数之间的调用关系,效率实在是太低了,最近总结出一个更简便的方法,就是利用Qt ...
  • 非模态窗体的创建

    2019-07-29 18:05:46
    在Winform中模态窗体和非模态窗体的使用在于调用的方法不同。 模态窗体:ShowDialog()方法,非模态窗体使用:Show()方法。 区别: 模态与非模态窗体的主要区别是窗体显示的时候是否可以操作其他窗体。模态窗...
  • * 在此,我们简单演示一下GUI图形界面,创建窗体,创建按钮,并创建监听器对特征操作进行处理,以匿名内部类方式 * GUI操作内容非常多,极其复杂,所以得去查API文档进行具体操作 * 注意一个问题:在这里...
  • 现在,C#创建不规则窗体...做法:重写Form1_Paint事件(Form1是窗体的名字),最简单的一种情况如下: System.Drawing.Drawing2D.GraphicsPath shape = new System.Drawing.Drawing2D.GraphicsPath(); shape...
  • MFC创建自定义窗体

    千次阅读 2018-10-30 16:36:10
    对于GUI变成来说,创建子窗体自然是很必要的一件事情,C++与C#相比,创建子窗体要麻烦一下,但是它们创建窗体的流程是基本相同的。本文主要浅谈创建子窗体,并获取子窗体输入的数据的方法与步骤。实例所使用的IDE...
  • 实现的主要思路是创建一个子窗体的父类并在类中声明一个委托,当父窗体调用子窗体时绑定显示Panel的方法。如下: 1.新建一个项目,分别添加MainForm、BaseChildForm两个窗体,其中MainForm的IsMdiContainer设为Tru...
  • 知识点:创建Windows应用程序的方法窗体的基本属性和方法、基本控件的使用、事件处理、消息框的使用 1、创建windows应用程序的方法 Windows应用程序是目前应用软的主流,用户使用方便且功能强大。所以掌握...
  • windows下不规则窗体创建的几种方法

    千次阅读 2011-11-10 10:14:15
     在绝大多数Windows应用程序中,其窗体都是使用正规正矩矩形窗体,例如我们常用,“记事本”,“扫雷”,等等。矩形窗体,具有编程实现简单,风格简洁优点,所以在普通文档应用程序和简单小游戏中使用足矣...
  • 用DELPHI创建DLL文件,封装窗体的实现方法实例:即一个程序不再是单一的一个EXE文件了,而是由一个EXE文件加N个DLL文件组成,这样做的原因是方便以后的维护与更新,也是跨平台开发的重要一步。1, 打开DELPHI,新建...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,501
精华内容 600
关键字:

创建窗体的方法是