在程序如何动态创建一个FORM

解决方案 »

  1.   

    Private Sub Command1_Click()
     Dim x As New Form1
     x.Caption = "NewForm"
     x.Show
    End Sub
      

  2.   

    Option ExplicitPrivate Sub Command1_Click()
    Dim aa As Form
    Set aa = New Form1
    aa.Caption = "新窗体"
    aa.Show
    End Sub
      

  3.   

    有能力的话,看看下面这个“Hello”的例子//SDK开始,以前总是问人要一个每行加注的例子,结果很不幸.
    //于是就从书里找,可是都没有现成的,以下是我的理解,方便想学SDK
    //且象我这样菜的人.如果你认为有用就送花没用就飞刀,我会好好
    #include "stdafx.h" //头文件不能去掉 
    #include <windows.h>//头文件不能去掉
    LRESULT CALLBACK WndProc (HWND,// 窗口实例句柄
                    UINT, // 消息标识
                    WPARAM, // 消息附加信息
                    LPARAM);// 消息附加信息
    int WINAPI WinMain(HINSTANCE hInstance, //应用程序当前实例句柄
                       HINSTANCE hPrevInstance,//应用程序其它实例句柄
                       PSTR szCmdLine,//指向程序命令行参数的指针
                       int iCmdShow)//告诉如何显示这个窗口
    {
    //建立窗口类  static TCHAR szAppName[] = TEXT ("HelloWin");
         HWND  hwnd;//主窗口句柄(句柄为窗口windows中的标识)
         MSG   msg;//定义消息名
         WNDCLASS  wc;//建立窗口类,就是用WNDCLASS结构定义一个结构变量
         wc.style = CS_HREDRAW | CS_VREDRAW;//成员style控制窗口的某些重要特性
         wc.lpfnWndProc = WndProc;//指向该窗口类的消息处理函数的指针,此函数称为窗口过程函数
         wc.cbClsExtra = 0;//cbClsExtra域指定用本窗口类建立的所有窗口结构分配的额外字节数
         wc.cbWndExtra = 0;//cbWndExtra域指定用本窗口类建立的所有窗口结构分配的额外字节数
         wc.hInstance = hInstance;//应用程序的实例名可改变的
         wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);//成员hIcon应用程序所使用图标的句柄
         wc.hCursor = LoadCursor (NULL, IDC_ARROW); //IDC_ARROW表示箭头光标
         wc.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);//窗口背景的刷子颜色
         wc.lpszMenuName = NULL; //lpszMenuName用来指定菜单名
         wc.lpszClassName = szAppName; //lpszClassName指定了本窗口的类名//注册窗口类     if (!RegisterClass (&wc))
         {
              MessageBox (NULL, TEXT ("This program requires Windows NT!"), 
                          szAppName, MB_ICONERROR);
              return 0;
         }//创建窗口     hwnd = CreateWindow (szAppName,  // 登记窗口类名,这个类名已经定义过了
               //CreateWindow()的返回值是已经创建的窗口的句柄,应用程序使用这个句柄来引用该窗口
                              TEXT ("奶奶的学好SDK为人类的幸福而奋斗!"), //表明窗口的标题
                              WS_OVERLAPPEDWINDOW, // 表明窗口的风格,如有无最大化,最小化按纽
                              CW_USEDEFAULT,    // 程序运行后窗口在屏幕中的x坐标值
                              CW_USEDEFAULT,    // 程序运行后窗口在屏幕中的y坐标值
                              CW_USEDEFAULT,    // 窗口的大小x值
                              CW_USEDEFAULT,    // 窗口的大小y值
                              NULL,             // 创建窗口时可以指定其父窗口
                              NULL,             // 指明窗口的菜单
                              hInstance,        // 程序实例句柄
                              NULL);            // 附加数据,一般都是0
    //显示和更新窗口     ShowWindow (hwnd, iCmdShow);//第一参数是窗口句柄,第二参数则告诉如何显示这个窗口
         UpdateWindow (hwnd);//调用UpdateWindow将产生WM_PAINT消息,这个消息将使窗口重画//创建消息循环     while(GetMessage(&msg, NULL, 0, 0))//从消息队列中取出一个消息
         {
              TranslateMessage (&msg);//翻译消息
              DispatchMessage (&msg);//撤去消息
         }
         //终止应用程序
         return msg.wParam;//表示从PostQuitMessage返回的值
    }//窗口过程,窗口过程函数LRESULT CALLBACK WndProc (HWND hwnd,     // 窗口实例句柄 
                              UINT message,  // 消息标识
                              WPARAM wParam, // 第一条消息参数 
                              LPARAM lParam) // 第二条消息参数
    {
         HDC         hdc;
         PAINTSTRUCT ps;
         RECT        rect;
         switch (message)//窗口过程处理消息通常以switch语句开始,每一条消息ID都跟有一条case语句
         {
         case WM_PAINT://这个消息将使窗口重画 
              hdc = BeginPaint (hwnd, &ps);//通常情况下用BeginPaint()来响应WM_PAINT消息
              GetClientRect (hwnd, &rect);//在调用完BeginPaint之后,WndProc接着调用GetClientRect
              //第一个hwnd是程序窗口句柄。第二个参数是一个指针,指向一个RECT类型的结构
              DrawText (hdc, TEXT ("奶奶的学好SDK为人类的幸福而奋斗"), -1, &rect,
                        DT_SINGLELINE | DT_CENTER | DT_VCENTER);
              EndPaint (hwnd, &ps);//结束BeginPaint函数
              return 0;
         case WM_DESTROY://只要用户关闭窗口,就会发送WM_DESTROY消息 
              PostQuitMessage (0);//程序通过调用PostQuitMessage以标准方式响应WM_DESTROY消息
              //GetMessage收到的消息是WM_QUIT时返回FALSE,结束消息循环,从而终止应用程序
              return 0;
         }
         //其他消息由DefWindowProc默认处理函数来处理
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }