精华内容
下载资源
问答
  • c++ 窗体程序17例

    2011-07-26 17:29:16
    一些c++窗体的小程序 包括窗体颜色的改变 鼠标指针位置的坐标 基本控件的使用等等
  • 在初步学习了c++之后,我们可以着手设计一个窗口类程序,但在这之前,我们得知道c++里面是怎么设计窗口的。 开始创建窗口之前,我们需要包含几个关键的头文件: #include <windows.h> #include <stdlib.h&...

    (本文使用VS2017)
    在初步学习了c++之后,我们可以着手设计一个窗口类程序,但在这之前,我们得知道c++里面是怎么设计窗口的。
    开始创建窗口之前,我们需要包含几个关键的头文件:

    #include <windows.h>
    #include <stdlib.h>
    #include <tchar.h>
    

    当然,如果你和我一样,是这么创建的(如下图),那么VS2017会自动包含一个stdafx.h的预编译头文件,里面包含了很多我们可能要用到的头文件,也就不用再重复输入上面的头文件。创建窗体程序项目窗口

    #include "stdafx.h"
    

    另外通过VS2017创建的桌面应用程序,会自动包含一个窗口创建模板,该模板甚至能直接运行,非常有利于我们的学习。
    在这里插入图片描述
    我们先跳过长长的函数和变量名,直接跳到注册窗口类。
    在这里插入图片描述
    众所周知,窗口,就是打开我的电脑、任意文档、甚至浏览器所弹出的界面。这个界面是可以变化的(长宽、风格、名称等等)。
    在c++中也一样,在创建了一个窗口后,你可以为该窗口配置属性。
    c++自带了一个类 WNDCLASS( 一般用WNDCLASSEXW,EX表示增强版,W表示宽字符),用于创建窗口对象, WNDCLASSEXW中有很多类成员对象,用于配置窗口属性。

    看函数MyRegisterClass内的语句:
    看不懂的地方可以先跳过,照着写就行

     WNDCLASSEXW wcex; //WNDCLASSEXW是窗口类,此句的意思是创建一个名为wcex的窗口对象,也就是我们要创建的窗口
    
        wcex.cbSize = sizeof(WNDCLASSEX);//wcex窗口的大小,一般都用sizeof获取标准大小,我也不知道为啥
    
        wcex.style          = CS_HREDRAW | CS_VREDRAW;//窗口样式,详见下文
        wcex.lpfnWndProc    = WndProc;				//窗口回调函数,用来记录你在窗口进行的操作,并返回操作导致的结果,后面再细讲。
        wcex.cbClsExtra     = 0;					//窗口类的额外空间,单位:字节数。这地方和下面都比较难理解,这是正常的,不慌。
        wcex.cbWndExtra     = 0;					//窗口实例的额外空间,单位:字节数。
        wcex.hInstance      = hInstance;			//窗口实例句柄,
        wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINDOWSPROJECT4));			//窗口图标句柄
        wcex.hCursor        = LoadCursor(nullptr, IDC_ARROW);//鼠标光标句柄
        wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);//窗口背景颜色句柄,该句表示默认颜色(实际上也可以把+1换成+2/3改颜色)
        wcex.lpszMenuName   = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT4);//所用菜单名称,资源文件中有一个后缀rc的文件记录了菜单方案
        wcex.lpszClassName  = szWindowClass;		//窗口类的名称
        wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));//窗口的小图标句柄
    

    下面对一些重要的对象成员进行解释:
    ①style 窗口样式
    CS_HREDRAW | CS_VREDRAW意味着当窗口宽度或高度发生变化时,窗口将根据窗口大小重新绘制。其中前缀CS表示class type,HREDRAW代表当宽度(H代表水平方向Horizontal)发生改变时进行重绘(Redraw),VREDRAW代表着当高度(V代表垂直方向Vertical)方向发生变化时进行重绘。
    除此之外,style还可以设置其他的值,常见的值如下:

    CS_BYTEALIGNCLIENT
    窗口的客户区域以“字符边界”对齐,当系统调整窗口的水平位置时,客户区域的左边坐标是8的整数倍

    CS_BYTEALIGNWINDOW
    窗口以“字符边界”对齐,当系统调整窗口的水平位置时,客户区域的左边坐标是8的整数倍

    CS_CLASSDC
    分配一个设备环境并被类中的所有窗体共享。它是可以适用于一个应用程序的若干线程创建的一个相同类的窗体。当多个线程试图同时使用相同的设备环境时,系统只允许一个线程成功地进行绘图操作

    CS_DBLCLKS
    当用户双击窗口时,将向窗口函数发送鼠标双击消息

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

    CS_HREDRAW
    如果窗口的位置或宽度发生改变,将重绘窗口

    CS_NOCLOSE
    窗口中的“关闭”按钮不可见

    CS_OWNDC
    为同一个窗口类中的每个窗口创建一个唯一的设备上下文

    CS_PARENTDC
    设置子窗口中剪下的矩形区域到父窗口中,以使子窗口可以在父窗口上绘图。指定该风格可以提高应用程序的性能

    CS_SAVEBITS
    把被窗口遮掩的屏幕图像作为位图保存起来。当该窗口被移动时,Windows操作系统使用被保存的位图来重建屏幕图像

    CS_VREDRAW
    如果窗口的位置或高度改变,将重绘窗口

    ②lpfnWndProc 窗口回调函数
    这个函数用于处理用户对窗口的操作,此处可以右键WndProc转到定义,查看该函数的定义。
    WndProc包含四个参数:hwnd是要处理窗口的句柄;message是消息ID,代表了不同的消息类型;wParam的值为按下按键的虚拟键码;lParam则存储按键的相关状态信息。
    这个函数留到后面再讲。

    ③cbClsExtra/cbWndExtra
    说实话,这个地方我也没太理解,但我找到一个人讲的比较好,看这个链接:
    https://blog.csdn.net/zlk1214/article/details/50736674

    ④hInstance 窗口实例句柄
    句柄可以理解为一个编号,即窗口实例的编号。因为在实际应用中,我们会打开多个窗口,Windows为了区别不同的窗口,所以要给每个窗口设置一个不同的句柄。

    ⑤hIcon 窗口图标句柄
    hIcon和hIconSm都是表示窗口图标的成员,不同的是,hIcon表示任务栏的图标,hIconSm表示小图标,如图所示:
    在这里插入图片描述
    那么如何更改图标呢?
    首先我们需要一个后缀为ico的标准图标文件,我们可以在很多地方下载到。
    比如https://www.easyicon.net/
    在这里插入图片描述
    下载完之后得到一个ico文件,我们把它移动到你新建的项目中(如果不知道路径,可以在资源视图中看到)
    在这里插入图片描述
    如图所示,这样在资源视图icon目录下会多出一个个IDI_ICON1的文件(当然你也可以叫其他名字)
    我们再切换到Resource.h头文件中,给我们导入的IDI_CON1一个编号:
    在这里插入图片描述

    这样我们就能在WNDCLASSEX对象中使用它了,使:

    wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));
     wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_ICON1));//注意到哪里替换了吗?
    

    再运行就是我们想要的图标了:
    在这里插入图片描述

    ⑥hCursor 光标句柄
    改变鼠标光标的语句,目前我也不太会用,估计和改变图标差不多,先就默认吧。

    ⑦hbrBackground 背景颜色
    (HBRUSH)(COLOR_WINDOW+1),表示windows默认的颜色,+1没有特别的含义,因为滚动条颜色宏被定义成 #define COLOR_SCROLLBAR 0如果不进行+1的话,使用这个颜色就是意外的变成NULL。
    我们也可以使用CreateSolidBrush(RGB(255,100,100)),来调制颜色,RBG里面的数字自己调。
    如图:
    在这里插入图片描述
    ⑧lpszMenuName 菜单名
    wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWSPROJECT4);
    我们可以在右侧的资源文件中看到菜单设计(IDC_WINDOWSPROJECT4)
    在这里插入图片描述
    更方便的自定义菜单方案还是在资源视图中,你一试便知。
    在这里插入图片描述
    ⑨lpszClassName 窗口类的名字
    以上过程实际上只是在电脑中创建了一个对象,并未实际创建窗口,如果要把我们创建的窗口对象显示出来,需要用到CreateWindowW语句(你可以在后面的语句中找到它),当创建窗口时,就需要用到窗口类的名字。(这一段我纯属瞎扯,等我以后整明白了再改。)

    至此,我们已经大致理清了窗体类WNDCLASSEX中各成员参数的含义,但还有更多的问题等待着我们搞明白,因此,未完待续……

    展开全文
  • 如题 我是在VS2010下编译的 同样的配置方法 后台程序可以运行 而窗体程序导包部分就报错了 报错内容如下 1>D:\ocv\OpenCV2.3\build\include\opencv2/core/types_c.h(289): error C3862: “cvRound”: 不能

     

    如题 我是在VS2010下编译的 同样的配置方法 后台程序可以运行 而窗体程序导包部分就报错了 报错内容如下


    1>D:\ocv\OpenCV2.3\build\include\opencv2/core/types_c.h(289): error C3862: “cvRound”: 不能使用 /clr:pure 或 /clr:safe 编译非托管函数
    1>          托管代码中不支持内联本机程序集
    1>D:\ocv\OpenCV2.3\build\include\opencv2/core/types_c.h(289): error C3645: “cvRound”: __clrcall 不能用在编译为本机代码的函数上
    1>D:\ocv\OpenCV2.3\build\include\opencv2/core/mat.hpp(115): error C3861: “_InterlockedExchangeAdd”: 找不到标识符
    1>D:\ocv\OpenCV2.3\build\include\opencv2/core/mat.hpp(305): error C3861: “_InterlockedExchangeAdd”: 找不到标识符
    1>D:\ocv\OpenCV2.3\build\include\opencv2/core/mat.hpp(376): error C3861: “_InterlockedExchangeAdd”: 找不到标识符
    1>D:\ocv\OpenCV2.3\build\include\opencv2/core/mat.hpp(380): error C3861: “_InterlockedExchangeAdd”: 找不到标识符
    1>D:\ocv\OpenCV2.3\build\include\opencv2/core/mat.hpp(2024): error C3861: “_InterlockedExchangeAdd”: 找不到标识符
    1>D:\ocv\OpenCV2.3\build\include\opencv2/core/mat.hpp(2052): error C3861: “_InterlockedExchangeAdd”: 找不到标识符
    1>D:\ocv\OpenCV2.3\build\include\opencv2/core/mat.hpp(2056): error C3861: “_InterlockedExchangeAdd”: 找不到标识符
    1>D:\vs\VC\include\emmintrin.h(27): fatal error C1189: #error :  ERROR: EMMnot supported in the pure mode!

     

    解决方法:

    在“项目”->“属性”->“配置属性”->“常规”->“项目默认值”->“公共语言运行时支持”,将默认的“纯MSTL公共语言运行时支持(/clr:pure)”,改为“公共语言运行时支持(/clr)”即可.

    展开全文
  • 老蔡写了一个基于QT的窗体程序,而过去写的类的调试信息都是用cout显示的,苦于窗体程序无法显示cout信息很多信息都看不到,于是就想到让控制台和窗体同时显示。显示控制台方法如下 1.项目(或者叫“工程”,或者...
    
    

    老蔡写了一个基于QT的窗体程序,而过去写的类的调试信息都是用cout显示的,苦于窗体程序无法显示cout信息很多信息都看不到,于是就想到让控制台和窗体同时显示。显示控制台方法如下

    1.项目(或者叫“工程”,或者project)

    2.连接器(linker)

    3.系统(system)

    4.将第一项选成控制台(Console)。不过务必要记得选择控制台前是在什么选项上,等调试结束后选回去,不然程序编译出来,就带着那个黑框框的控制台了。

    打完收工。希望调试C++看不到控制台的天使们看到这篇文章后不再继续折翼了。



    原帖地址:http://www.oldcai.com/archives/180

    展开全文
  • C语言实现窗体程序,DevC++ 窗体应用

    千次阅读 2020-10-27 17:33:26
    DevC++ 窗体应用,C语言窗体程序 对于很多学习C语言的同学来说,平时自己写的都是控制台程序,一个黑板版,很难受。 今天教大家用C,写出一个窗体exe。 效果 创建一个文件,扩展名.c,然后把源码复制上去。 修改时...

    DevC++ 窗体应用,C语言窗体程序

    对于很多学习C语言的同学来说,平时自己写的都是控制台程序,一个黑板版,很难受。
    今天教大家用C,写出一个九九乘法表的窗体exe。

    效果

    效果图
    环境
    创建一个文件,扩展名.c,然后把源码复制上去。
    修改时,把自己要绘制的内容放入第三行draw函数里面就可以啦。
    好吧,直接上源码:

    #include <string.h>
    #include <windows.h>
    void draw(HWND hwnd) {
        HDC hdc;
        PAINTSTRUCT ps;
        RECT rect;
        hdc = BeginPaint(hwnd, &ps);
        GetClientRect(hwnd, &rect);
        //字符串1
    	//SetTextColor(hdc,RGB(255,0,0));
        DrawText(hdc,
                 TEXT ("卧槽,我在哪儿?"), -1,
                 &rect,
                 DT_TOP|DT_CENTER
        );
        //字符串2
        rect.left=0;
        rect.top=30;
    	//SetTextColor(hdc,RGB(69,116,224));
        DrawText(hdc,
                 TEXT ("乘法口诀表:"), -1,
                 &rect,
                 DT_TOP
        );
        //字符串3
        char str[2000]="";
        int i;
        int j;
        for (i= 1; i <= 9; ++i) {
            for (j = 1; j <= i; ++j) {
                char a1[10],a2[10],a3[10];
                itoa(i,a1,10);
                itoa(j,a2,10);
                itoa(i*j,a3,10);
    
                strcat(str, a1);
                strcat(str, "x");
                strcat(str, a2);
                strcat(str, "=");
                strcat(str, a3);
                strcat(str, "  ");
            }
            strcat(str,  "\n");
        }
    
        rect.left=0;
        rect.top=60;
    	//SetTextColor(hdc,RGB(87,30,210));
        DrawText(hdc,
                 TEXT (str), -1,
                 &rect,
                 DT_TOP
        );
        EndPaint(hwnd, &ps);
    }
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
        switch (Message) {
            case WM_PAINT:
                draw(hwnd);
                break;
            case WM_DESTROY:
                PostQuitMessage(0);
                break;
            default:
                return DefWindowProc(hwnd, Message, wParam, lParam);
        }
        return 0;
    }
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
        WNDCLASSEX wc;
        HWND hwnd;
        MSG msg;
        memset(&wc, 0, sizeof(wc));
        wc.cbSize = sizeof(WNDCLASSEX);
        wc.lpfnWndProc = WndProc;
        wc.hInstance = hInstance;
        wc.hCursor = LoadCursor(NULL, IDC_ARROW);
        wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
        wc.lpszClassName = "WindowClass";
        wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
        wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
        if (!RegisterClassEx(&wc)) {
            MessageBox(NULL, "Window Registration Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK);
            return 0;
        }
        hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,
                              "WindowClass",
                              "C语言实现窗体",
                              WS_VISIBLE | WS_OVERLAPPEDWINDOW,
                              CW_USEDEFAULT,
                              CW_USEDEFAULT,
                              600,
                              300,
                              NULL, NULL, hInstance, NULL);
    
        if (hwnd == NULL) {
            MessageBox(NULL, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK);
            return 0;
        }
        while (GetMessage(&msg, NULL, 0, 0) > 0) {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        return msg.wParam;
    }
    
    

    代码你也看完了,求关注不过分吧。

    展开全文
  • VS2019创建C++窗体应用程序 1.运行VS2019 2.点击创建新项目 3.选择CLR空项目点击下一步 4.在配置新项目界面输入项目名称选择.net Framework框架,点击创建 5.在解决方案资源管理器中右键单击创建的CLR项目选择属性弹...
  • VS2019创建C++窗体应用程序 1.运行VS2019 2.点击创建新项目 3.选择CLR空项目点击下一步 4.在配置新项目界面输入项目名称选择.net Framework框架,点击创建 5.在解决方案资源管理器中右键单击创建的CLR项目选择属性弹...
  • 想在窗体应用程序框架下做一个Scoket异步通讯,主要是客户端这边 <p>void Socket_connect(void) {<!-- -->  // ****************************SOCKET 连接 *********************************8...
  • visual c++ vc窗体震动程序.zip
  • c++ windows 窗体程序

    2013-04-20 18:33:03
    使用windows API 编的窗体程序,能够很好地学习窗体编程
  • VS2013 C++ Windows窗体应用程序补丁

    热门讨论 2014-12-22 16:20:46
    VS2013 C++ Windows窗体应用程序补丁 VS2012后取消了Windows窗体应用程序 在这里恢复了VS2013对C++/CLR中Windows Forms的支持 使用:直接安装即可
  • 如题! c#窗体程序要控制c++控制台程序,两都需要通信,具体是: c#窗体程序发送,字母c; c++控制台程序接收。 有没有简单的、可用的代码,请帮忙。
  • 写作目的包含:(1)让学生通过模仿,开发出类似风格的窗体程序;(2)以此为起点,课外通过案例教程等參考资料,学习开发很多其它的功能有用的程序;(3)体会到程序设计能力的核心并不在界面,从而能潜心提高程序...
  • c++窗体与界面设计

    2017-01-03 21:23:23
    多媒体触摸屏程序应用实例
  • VS2015 C++&CLR 编写 Windows 窗体应用程序
  • 【摘要】本文适合已经完整学习了C++面向对象机制,但在开发窗体程序方面还是零基础的同学。通过本文的引导进行实践体验,目的是消除同学们开发窗体程序的神奇感,为下一步的自学找到感觉。同一时候,能更深入地体会...
  • 一开始建立的窗体工程都是带很多窗口,而且自己拉到窗体的控件,一调试就看不到了,是因为新建立工程项目时勾选了太多其他的了,这里记录分享一下建立一个单纯的窗体程序项目步骤给有需要的人也可以学习。...
  • 主要介绍了C++获得其他程序窗体控件中信息的方法,涉及windows控件句柄的获取技巧,需要的朋友可以参考下
  • 但是老师规定不能只能用双向循环链表存储数据,所以楼主便想创建"Windows窗体应用程序"工程。如图:![图片说明](https://img-ask.csdn.net/upload/201612/02/1480665530_509118.png) 之后创建好了两个窗口,一个...
  • 登陆框窗体应用程序 Visual c++.net做的例子
  • c++中怎么实现窗体程序,就是像Winform窗体程序相似的设计,新建一个MFC项目,在怎么办啊?是不是用代码建的窗体啊,还是建好项目之后就有了窗体的形状?求详细步骤。
  • Windows窗体程序设计

    2014-01-22 22:02:50
    关于c++的Windows窗体程序设计编程

空空如也

空空如也

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

c++窗体程序

c++ 订阅