VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 941|回复: 3

[交流] 帮我看下,如何才能关闭主窗口,第二个还在,或着说窗口独立

[复制链接]
07_avatar_middle
在线会员 发表于 2016-1-5 20:13:15 | 显示全部楼层 |阅读模式
#include <windows.h>
#include "res.h"
#include <ctype.h>
/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK
myproc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
HWND mycommand(HWND hwnd,TCHAR  name[],int h,int y,int r,int m,HMENU menu)  ;
HWND myEDIT(HWND hwnd,TCHAR  name[],int h,int y,int r,int m,HMENU menu)  ;
/* Current app instance */
HINSTANCE hInst;
/*  Make the class name into a global variable  */
TCHAR szClassName[] = TEXT("WindowsApp");
HWND hwnd,hwnds,hwndClient,hwndex,ey,eyy;
WNDPROC oldproc ;
TCHAR str[],strs[];
int x;
int WINAPI
WinMain (HINSTANCE hThisInstance,
         HINSTANCE hPrevInstance,
         LPSTR lpszArgument,
         int nFunsterStil)

{
                 /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */

                /* Save this instance */
                hInst = hThisInstance;
       
    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH)(COLOR_WINDOW+6);

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           TEXT("测试"),                 /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           0,                                                       /* where the window ends up on the screen */
           CW_USEDEFAULT,       /* The programs width */
           0,                         /* and height in pixels */
          hwnd ,        /* The window is a child-window to desktop */
          NULL,                /* No menu */
           hInst,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );

    /* Make the window visible on the screen */
    ShowWindow (hwnd, nFunsterStil);
oldproc=(WNDPROC)GetWindowLongPtr(hwnd,GWL_WNDPROC);
    /* Run the message loop. It will run until GetMessage() returns 0 */
   
         
        mycommand(hwnd,"确定",5,100,50,100,IDB_Button1);
        hwndex=myEDIT(hwnd,"1",60,50,350,50,IDB_Edit1);
        ey=myEDIT(hwnd,"2",120,110,350,50,IDB_Edit2);
        eyy=myEDIT(hwnd,"",300,180,350,50,IDB_Edit3);
        mycommand(hwnd,"计算",130,200,150,50,IDB_Button2);
        while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }

    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}


/*  This function is called by the Windows function DispatchMessage()  */

LRESULT CALLBACK
WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
       
       
    switch (message)                  /* handle the messages */
    {
                       
      
               
                case WM_COMMAND:
                 switch(LOWORD(wParam))  {
       
                 case IDB_Button1:  {
                if (HIWORD(wParam) == BN_CLICKED  )  {
                 if(hwndClient==0)
                          
                                         hwndClient = CreateWindow (szClassName, "第二个窗口",
                               WS_OVERLAPPEDWINDOW | WS_SYSMENU,
                               CW_USEDEFAULT, CW_USEDEFAULT,
                               CW_USEDEFAULT, CW_USEDEFAULT,
                               NULL, NULL, hInst, NULL);
                               
                               
                               ShowWindow (hwndClient,  SW_SHOW);
                               UpdateWindow (hwndClient);
                      
                          x=(WNDPROC)SetWindowLongPtr(hwndClient,GWL_WNDPROC,(LONG)myproc);
                          mycommand(hwndClient,"zua",30,20,100,100,IDB_Button3) ;
               
                                 case IDB_Button2:
                SendMessage(hwndex,WM_GETTEXT,1024,str);
        SendMessage(ey,WM_GETTEXT,1024,strs);
        int rrr;
        TCHAR ch[50];
        rrr=atoi(str)+atoi(strs);
        itoa(rrr,ch,10);//itoa 将数字装字符
                //SetWindowText(eyy,ch);//设置文本框内容
                //MessageBox(hwnd, ch,str,1);
                SendMessage(eyy,WM_SETTEXT,0,ch);//设置文本框内容 WM_SETTEXT
                break;
                               
                               
                                }}}break;
               
               
                case WM_DESTROY:
                       
           PostQuitMessage (0);
                      /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}
LRESULT CALLBACK
myproc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)                  /* handle the messages */
    {
               
        case WM_COMMAND:
                 switch(LOWORD(wParam))  {
       
                 case IDB_Button3:  {
                if (HIWORD(wParam) == BN_CLICKED  )  {
                 MessageBox(hwnd,"","",0);
                }}}break;
       
               
               
                 case WM_CLOSE:
                 hwndClient=0;
                DestroyWindow(hwnd)        ;


default:                      /* for messages that we don't deal with */
          return DefWindowProc (hwnd, message, wParam, lParam);
                    //return CallWindowProc ((WNDPROC)oldproc,        hwnd, message, wParam, lParam);
}return 0;
}


/*绘制按钮控件*/
HWND mycommand(HWND hwnd,TCHAR  name[],int h,int y,int r,int m,HMENU menu)
{
        HWND phwnd;
phwnd=CreateWindowEx(WS_EX_CLIENTEDGE,
                             "Button",
                             name,
                              BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP
                              ,                                                   
                                                                                 
                            h, y, r, m,
                             hwnd,                                             
                         menu,                                    
                         hInst,                             
                          NULL);

    /* Make the window visible on the screen */
    ShowWindow (phwnd, SW_SHOW);
    UpdateWindow(phwnd);
        return         phwnd;
}
/*绘制编辑框控件*/
HWND myEDIT(HWND hwnd,TCHAR  name[],int h,int y,int r,int m,HMENU menu)
{
        HWND phwnd;
phwnd=CreateWindowEx(WS_EX_CLIENTEDGE,
                             "Edit",
                             name,
                             WS_CHILD | WS_VISIBLE | WS_TABSTOP
                              ,                                                   
                                                                                    
                                                                                    
                            h, y, r, m,
                             hwnd,                                             
                         menu,                                    
                         hInst,                             
                          NULL);  

    /* Make the window visible on the screen */
    ShowWindow (phwnd, SW_SHOW);
    UpdateWindow(phwnd);
        return         phwnd;
}





上一篇:c语言中的 strcmp()函数
下一篇:typedef的三个用途
51_avatar_middle
online_admins 发表于 2016-1-5 22:43:26 | 显示全部楼层
主窗口关闭之后消息循环就退出了,这样主线程就结束了,所以进程就结束了,其他任何子窗口自然就退出了
07_avatar_middle
ico_lz  楼主| 发表于 2016-1-7 21:14:22 | 显示全部楼层
Syc 发表于 2016-1-5 22:43
主窗口关闭之后消息循环就退出了,这样主线程就结束了,所以进程就结束了,其他任何子窗口自然就退出了

c语言内存对话框如何创建,给个源码看看啊
26_avatar_middle
在线会员 发表于 2016-7-13 22:30:23 来自手机 | 显示全部楼层
我就笑笑不说话1468448552.58
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-3-19 06:58

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表