精华内容
下载资源
问答
  • C++ 创建窗口

    2013-12-08 13:17:26
    C++ 创建窗口 Windows ************************************************************************ 登记自己的窗口类 ************************************************************************/ bool ...
  • C++创建窗口

    2012-07-21 20:59:34
    windows窗口类,利用windows API创建窗口。 [code="c++"] #include //windows窗口标准库函数 #include //c语言需要的库函数 LRESULT CALLBACK WindowProc(//窗口过程函数原型 HWND hwnd, // ...
    windows窗口类,利用windows API创建窗口。


    #include <Windows.h> //windows窗口标准库函数
    #include <stdio.h> //c语言需要的库函数

    LRESULT CALLBACK WindowProc(//窗口过程函数原型
    HWND hwnd, // handle to window
    UINT uMsg, // message identifier
    WPARAM wParam, // first message parameter
    LPARAM lParam // second message parameter
    );
    int WINAPI WinMain(//窗口主函数,相当于 DOS下的main函数
    HINSTANCE hInstance, // handle to current instance
    HINSTANCE hPrevInstance, // handle to previous instance
    LPSTR lpCmdLine, // pointer to command line
    int nCmdShow // show state of window
    )
    {
    WNDCLASS wcs;
    wcs.cbClsExtra=0; //窗口类附加参数
    wcs.cbWndExtra=0; //窗口附加参数
    wcs.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//窗口DC背景
    wcs.hCursor=LoadCursor(hInstance,IDC_CROSS); //鼠标样式
    wcs.hIcon=LoadIcon(NULL,IDI_ERROR);//窗口icon
    wcs.hInstance=hInstance;//应用程序实例
    wcs.lpfnWndProc=WindowProc;
    wcs.lpszClassName="练习窗口";
    wcs.lpszMenuName=NULL;
    wcs.style=CS_VREDRAW|CS_HREDRAW;
    RegisterClass(&wcs);
    HWND hWnd;
    hWnd=CreateWindow("练习窗口","练习窗口",WS_OVERLAPPEDWINDOW,0,0,600,600,NULL,NULL,hInstance,NULL);
    ShowWindow(hWnd,nCmdShow);
    UpdateWindow(hWnd);
    MSG msg;
    //消息循环
    while(GetMessage(&msg,0,NULL,NULL))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    return 0;
    }
    LRESULT CALLBACK WindowProc(
    HWND hwnd, // handle to window
    UINT uMsg, // message identifier
    WPARAM wParam, // first message parameter
    LPARAM lParam // second message parameter
    )
    {
    switch(uMsg)
    {
    case WM_CLOSE:
    DestroyWindow(hwnd);
    break;
    case WM_DESTROY:
    PostQuitMessage(0);
    break;
    default:
    return DefWindowProc(hwnd,uMsg,wParam,lParam);
    break;
    }
    return 0;
    }
    展开全文
  • C++创建窗口 代码解析

    2020-07-10 04:49:16
    c++创建窗口步骤 : /*练习如何创建一个窗口: (1)声明窗口消息处理函数 (2)窗口主函数的声明,窗口类的创建 (3)窗口类的注册 (4)窗口显示模式的设定 主函数和处理函数的消息传递 (5)完成消息处理函数 *...

    c++创建窗口步骤 :

    /*练习如何创建一个窗口:
     
     (1)声明窗口消息处理函数
     (2)窗口主函数的声明,窗口类的创建
     (3)窗口类的注册
     (4)窗口显示模式的设定 主函数和处理函数的消息传递
     (5)完成消息处理函数

    */

    代码每一行都写了注释,希望对你有帮助 同时也算是给自己做个笔记了。若有不懂,获取需要源代码请看代码末尾。

    ​
    ​
    //(1)窗口消息处理函数: 返回值:LRESULT->long   "_stdcall" 修饰函数参数从右向左通过堆栈传递 
    //四个参数:HWND:窗口句柄 UINT 消息值(int) WPARAM:消息参数1 LPARAM:消息参数2
    
    LRESULT _stdcall WinProcess(HWND hwnd, UINT Message, WPARAM  WIparam, LPARAM IParam); 
    
    //(2)窗口主函数的声明,窗口类的创建
    int _stdcall WinMain(HINSTANCE hInstance, HINSTANCE hpreInstance, char* lpCmdLine, int nCmdShow)
    {
    	WNDCLASSEXA WindowsClass;
    	WindowsClass.cbSize = sizeof(WNDCLASSEXA);  //第一个成员:cbSize 分配给WNDCLASSEX类型的空间,直接计算即可
    	WindowsClass.style = CS_HREDRAW | CS_VREDRAW;  //第二个成员:style 窗口类所有窗口的样式 CS_开头常量 多个以“|”分割 注意是一个 |
    	WindowsClass.lpfnWndProc = WinProcess;  //第三个成员 IpfnWndProc指向的是消息处理函数,即为上面声明的函数。注意到WndProc指的是函数类型
    	WindowsClass.cbClsExtra = 0;//第四个成员:cbClsExtra 该类生成的所有窗口共享该附加空间
    	WindowsClass.cbWndExtra = 0;//第五个成员:cbWndExtra 是对窗口的,每一个实例化一个窗口的空间
    	WindowsClass.hInstance = hInstance;//第六个成员:模块实例句柄  第一个参数就是
    	WindowsClass.hIcon = LoadIconA(hInstance, MAKEINTRESOURCEA(32512));//第七个成员:hIcon 图标句柄,系统IDI_开头的常量
    	WindowsClass.hCursor = LoadCursorA(hInstance, MAKEINTRESOURCEA(32512));//第八个成员:hCursor 鼠标句柄,系统IDI_开头的常量
    	WindowsClass.hbrBackground = CreateSolidBrush(RGB(255,255,255));//第九个成员:hbrBackground 背景图刷句柄
    	WindowsClass.lpszMenuName = NULL;//第十个成员:ipseMenuName:菜单指针,没有就用null
    	WindowsClass.lpszClassName = "windowclass";//第十一个成员:ipszClassName 窗口类名指针 自己定义
    	WindowsClass.hIconSm = NULL;//第十二个成员: hIconSm :底部任务栏小图标句柄 定义为空就是hIcon图标 大小系统自动转换
       
    	//(3)窗口类的注册:用到api RegisterClassExA
    
    	if (RegisterClassExA(&WindowsClass))
    		return 0;//创建失败返回0
    
    	HWND WindowHandle = CreateWindowExA(WS_EX_LEFT, "windowclass", "练习创建窗口", WS_OVERLAPPEDWINDOW, 0, 0, 500, 500, NULL, NULL, hInstance, NULL);
    	if (WindowHandle)
    	{
    		return 0;//创建失败返回0
    	}
    	
    	//(4)窗口显示模式的设定 主函数和处理函数的消息传递
    	
    	ShowWindow(WindowHandle, SW_SCROLLCHILDREN);
    	UpdateWindow(WindowHandle);
    	//通过MSG结构体传递消息到消息处理函数
    	MSG Message;
    	while (GetMessageA(&Message, NULL, 0, 0)) //由于窗口在存在的过程中,窗口需要不间断的接收消息,所以是一个循环
    	{
    		TranslateMessage(&Message);   //将虚拟消息转化为字符消息
    		DispatchMessageA(&Message); //将消息传递给处理函数
    	}
    	return (int)Message.wParam;
    }
    
    LRESULT _stdcall WinProcess(HWND hwnd, UINT Message, WPARAM  WIparam, LPARAM IParam)
    {
    
    	
    	switch (Message)
    	{
    	case WM_PAINT://绘图更新事件
    	{
    		//写处理事件代码
    		break;
    	}
    	case WM_DESTROY://程序退出事件
    	{ 
    		//写处理事件代码
    		break;
    	}
    	default: 
    	{ 
    		return DefWindowProcA(hwnd, Message, WIparam,IParam); //默认处理办法
    		break;
    	}
    	
    	}
    	//源码文件Q:3492625357
    }
    
    ​
    
    ​

    展开全文
  • c++创建窗口程序

    千次阅读 2018-07-13 15:29:22
    转自https://blog.csdn.net/qq_32823595/article/details/79450832,先感谢一波~并在此...创建窗口4.显示及更新窗口#include &lt;windows.h&gt; //Windows编程的头文件 #include &lt;stdio.h&gt; ...

    转自https://blog.csdn.net/qq_32823595/article/details/79450832,先感谢一波~

    并在此基础上增加了自己的理解。

    创建一个完整的窗口程序需要四个步骤:
    1.设计一个窗口类
    2.注册窗口类
    3.创建窗口
    4.显示及更新窗口

    #include <windows.h>  //Windows编程的头文件
    #include <stdio.h>
    
    
    LRESULT CALLBACK WinSunProc(
    	HWND hwnd,  //handle to window 窗口的句柄
    	UINT uMsg,   //message identifier 消息标识符
    	WPARAM wParam,  //first message parameter 第一个消息参数
    	LPARAM lParam  //second message parameter 第二个消息参数
    );  //回调函数
    
    
    	//写程序的入口点函数
    int WINAPI WinMain(HINSTANCE hInstance,  //handle to current instance处理当前实例
    	HINSTANCE hPrevInstance,    //handle to previous instance处理上一个实例
    	LPSTR lpCmdLine,	//commannd line命令行
    	int nShowCmd)		 //show state显示状态,说明主应用程序窗口是最小化,最大化还是正常显示
    {
    	WNDCLASS wndcls;    //实例化
    	wndcls.cbClsExtra = 0;   //额外的类的附加字节数
    	wndcls.cbWndExtra = 0;   //窗口额外的附加字节数
    	//HGDIOBJ GetStockObject(int fnObject);检索预定义的备用笔、刷子、字体或者调色板的句柄
    	//BLACK_BRUSH 指黑色画刷
    	wndcls.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);  //背景颜色,GetStockObject()函数的返回值是一个HGDIOBJ格式的,强制转换成HBRUSH格式的赋值
    	//LoadCursor载入指定的光标类型
    	//原形:HCURSOR LoadCursor(HINSTANCE hlnstance,LPCTSTR lpCursorName);
    	//hlnstance标识一个模块事例,它的可执行文件包含要载入的光标,lpCursorName光标资源名
    	wndcls.hCursor = LoadCursor(NULL, IDC_CROSS);  //光标的类型 IDC_CROSS代表十字光标
    	// LoadIcon函数已经被LoadImage替代
    	wndcls.hIcon = LoadIcon(NULL, IDI_ERROR);   //图标
    	wndcls.hInstance = hInstance;              //应用程序的实例号
    	wndcls.lpfnWndProc = WinSunProc;       //窗口过程函数
    	wndcls.lpszClassName = "热爱游戏";  //类名
    	wndcls.lpszMenuName = NULL;   //菜单名
    	wndcls.style = CS_HREDRAW | CS_VREDRAW; //水平重画和垂直重画
    
    
    	RegisterClass(&wndcls);   //注册窗口类
    
    
    	HWND hwnd;   //实例化一个句柄
    	hwnd = CreateWindow("热爱游戏", "我喜欢玩儿游戏!!!", WS_OVERLAPPEDWINDOW, 0, 0, 600, 400, NULL, NULL, hInstance, NULL); //建立一个窗口
    
    	ShowWindow(hwnd, SW_SHOWNORMAL);   //显示窗口
    	UpdateWindow(hwnd);  //更新窗口
    
    	MSG msg;   //消息机制
    	while (GetMessage(&msg, NULL, 0, 0))    //消息循环
    	{
    		TranslateMessage(&msg);   //将传来的消息翻译
    		DispatchMessage(&msg);    //
    	}
    	return 0;
    }
    
    LRESULT CALLBACK WinSunProc(HWND hwnd,
    	UINT uMsg,
    	WPARAM wParam,
    	LPARAM lParam)
    {
    	switch (uMsg) {
    	case WM_CHAR:
    		char szChar[20];
    		sprintf_s(szChar, "char is %d", wParam);    //sprintf_s和sprintf的区别
    		MessageBox(hwnd, szChar, "游戏", 0);
    		break;
    	case WM_LBUTTONDOWN:
    		MessageBox(hwnd, "mouse clicked", "游戏", 0);
    		HDC hdc;
    		hdc = GetDC(hwnd);
    		TextOut(hdc, 0, 50, "我为游戏狂", strlen("我为游戏狂"));
    		ReleaseDC(hwnd, hdc);
    		break;
    	case WM_PAINT:
    		HDC hDC;
    		PAINTSTRUCT ps;
    		hDC = BeginPaint(hwnd, &ps);
    		TextOut(hDC, 0, 0, "我喜欢玩儿黑暗之魂3", strlen("我喜欢玩儿黑暗之魂3"));
    		EndPaint(hwnd, &ps);
    		break;
    	case WM_CLOSE:
    		if (IDYES == MessageBox(hwnd, "是否真的结束?", "游戏", MB_YESNO))
    		{
    			DestroyWindow(hwnd);  //销毁窗口
    		}
    		break;
    	case WM_DESTROY:
    		PostQuitMessage(0);
    		break;
    	default:
    		return DefWindowProc(hwnd, uMsg, wParam, lParam);
    
    
    	}
    	return 0;
    
    
    }
    


    展开全文
  • <p>C2440 “=”: 无法从“void (__stdcall *)(HWND,WPARAM,LPARAM)”转换为“WNDPROC”    <p>#include <iostream> #include <windows.h>...HWND MainWindowHandle =...
  • C++创建窗口程序初步

    2017-05-05 21:59:00
    1)的代码创建窗口,这样,在函数调用完毕出栈的时候窗口就会释放消失。 void f() { MainWindow w; w.show(); } 这样,运行的感觉就是窗口刚出现就消失,即一闪而过。 ( 3)  如果在函数里面创建了...

     

    写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文!

    本博客全网唯一合法URL:https://www.cnblogs.com/acm-icpcer/p/6815090.html 

     

     

    本篇博客的内容基于QT环境面向Windows编程所写。

     

    (1)在主函数里面使用类似下面的语句:

    MainWindow w;
    w.show();

    这样创建的窗口只有在程序结束运行的时候才会消失。

    2)写一个函数,在函数里面用(1)的代码创建窗口,这样,在函数调用完毕出栈的时候窗口就会释放消失。

    void f()
    {
          MainWindow w;
          w.show();
    }

    这样,运行的感觉就是窗口刚出现就消失,即一闪而过。

    3)

          如果在函数里面创建了一个窗口,但是我不希望它在函数调用结束的时候被释放消失,那么考虑到我在java编程随感里面写到的,在函数中创建的窗口生成在方法栈中。如果想要在函数调用结束时窗口不被释放,那么应该将窗口对象生成在堆中而不是栈中,那么这时的窗口除非程序被人为关闭,否则只有在计算机掉电的时候才会被关闭并在堆中被删除(在这种情况下,必然要使用到指针)。

          考虑在函数中写如下代码:

          MainWindow* w=new MainWindow();

          这样,就实现了在栈中产生指针,而实际上该窗口对象被操作系统所分配的内存则在堆中。故而,虽然函数调用结束时指针会被释放,但是在堆中的窗口对象则不会被释放,看到的结果就是窗口会一直存在。

          当然,如果你想让窗口在堆中的内存被释放,只能自己手动用delete关键字删除指针(这个操作可以在函数外通过return指针实现),例如:

    void f()
    {
          MainWindow* w = new MainWindow();
          w->show();
          return w;
    }
    int main()
    {
          MainWindow* p = f();
          delete p;
    }

    (4)

    上面的这个代码跑后,还是会闪屏,那么就希望让窗口停留一段时间后再关闭。

    那么这有两种实现方法:

    1)在 MainWindow的构造函数中设置timer对象,即时间器,以设置停留的时间:

    startTimer(5000);

    同时还要设置函数:

    void MainWindow::timerEvent(QTimerEvent *e)
    {
        close();
    }

    2)或者在主函数中设置QTimer对象:

    QTimer * timer = new QTimer;
    MainWindow* p=function1();
    //delete p;
    Qobject::connect(timer,&QTimer::timeout,p,&MainWindow::close);
    timer->start(5000);

    (5)有一个意思的小技巧,在main函数中为了关闭从函数中创建并被返回的窗口,一般采用删除函数返回的指针的方式来实现。那delete语句写在主函数的什么地方是有效的呢?

    答案是只要在主函数的返回语句之前都是有效的。如执行下列语句时,窗口一样会被删除。

    int result = a.exec();
    delete p;
    return result;

     (6)同样的,综合所有知识得到如下代码:

    1
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    
    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
    
    private:
        Ui::MainWindow *ui;
    protected:
        void timerEvent(QTimerEvent *e);
    };
    
    #endif // MAINWINDOW_H
    




    2
    #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); startTimer(5000); } MainWindow::~MainWindow() { delete ui; } void MainWindow::timerEvent(QTimerEvent *e) { //close(); }




    3 #include "mainwindow.h" #include <QApplication> #include <QTimer> MainWindow* function1() { MainWindow* w=new MainWindow(); w->show();//(*w).show(); //for(int i1=0;i1<999999;i1++){for(int i2=0;i2<999999;i2++){} } //delete w; return w; } int main(int argc, char *argv[]) { QApplication a(argc, argv); /*MainWindow w; w.show();*/ QTimer * timer = new QTimer; MainWindow* p=function1(); //delete p; QObject::connect(timer,&QTimer::timeout,p,&MainWindow::close); timer->start(5000); int result = a.exec(); delete p; return result; }

     

     

     

    TZ

    2017/5/5 于华中农业大学

     

     

    转载于:https://www.cnblogs.com/acm-icpcer/p/6815090.html

    展开全文
  • //注册窗口类LPCTSTR LPCWSTR hwnd = CreateWindow(lpszClassName, szTitle, WS_BORDER, 120, 50, 800, 600, NULL, NULL, hInstance, NULL); ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); while ...
  • CS_HREDRAW 如果窗口客户区宽度发生改变,重绘整个窗口 CS_VREDRAW 如果窗口客户区高度发生改变,重绘整个窗口 CS_DBLCLKS 能感受用户在窗口中的双击消息 CS_NOCLOSE 禁用系统菜单中的“关闭”命令 CS_OWNDC...
  • //创建窗口 HWND hMyWindow; hMyWindow = CreateWindow( " Oh myWindow " , // lpClassName " window name " , // lpWindowName WS_OVERLAPPEDWINDOW , // window style 50 , // x 50...
  • c++ builder 创建窗口

    2012-03-20 16:11:02
    c++ builder 动态创建窗口 小程序
  • c++窗口创建

    2013-11-13 20:18:43
    这是一个c++窗口创建程序,使用visual c++ 6.0的版本创建的win32程序,程序使用API函数。代码均验证了。
  • vc创建分层窗口.zip
  • C++创建windows窗口

    千次阅读 2020-05-01 21:44:49
    //2 创建窗口 //返回的窗口句柄 HWND hWnd = CreateWindowExA( NULL, "Raster",//更具注册的名称找到注册窗口类的数据 "Raster",//窗口的标题 WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,//窗口的...
  • C++创建简单窗口例程(Win32 API应用)-非MFC
  • C++ 控制台创建窗口,GDIPLUS加载png图片,实现悬浮窗,UpdateLayeredWindow,特效窗口。内含已编译的可执行文件。
  • 介绍C++创建不规则窗口的方法
  • Windows,C++编程创建窗口的过程详解

    万次阅读 2015-07-10 17:31:55
    Windows,C++编程,创建窗口的是个步骤详解
  • <C++>创建窗口

    2014-05-23 10:09:00
    Step 1:WNDCLASS typedef struct _WNDCLASS { UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HANDLE hInstance; ...
  • C++ 创建一个窗口

    2013-03-22 02:06:00
    最近想自学C++,那就从最基本的开始吧。学着别人很上进的样子,用博客来记录点点成长,希望有天能成为大牛。加油吧!!! #include <windows.h>#include <stdio.h>LRESULT CALLBACK WinSunProc( HWND...
  • C++聊天窗口

    2017-10-21 23:16:18
    C++聊天窗口实现,创建socket,实现一个聊天窗口。。。。
  • } //创建窗口 namedWindow("Lena", WINDOW_NORMAL); namedWindow("Photo", WINDOW_NORMAL); //移动窗口 moveWindow("Lena", 10, 10); moveWindow("Photo", 520, 10); //显示窗口 imshow("Lena", lena); ...
  • C++ WINDOWS 创建WINDOWS窗口模型

    千次阅读 2019-04-14 16:57:39
    C++ WINDOWS 创建WINDOWS窗口模型 #include <windows.h> //定义消息回调函数 HWND UINT WPARAM LPARAM 返回参数 LRESULT LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);...
  • [C++] 控制台创建窗口

    千次阅读 2020-10-10 19:59:47
    } // 创建窗口 HWND hWnd = CreateWindowEx( WS_EX_TOPMOST, // 窗口扩展样式:顶级窗口 "LYSM_class", // 窗口类名 "LYSM_title", // 窗口标题 WS_OVERLAPPEDWINDOW, // 窗口样式:重叠窗口 ...
  • BOOL CMainFrame::OnCreateClient( LPCREATESTRUCT /*lpcs*/, CCreateContext* pcc) { // create splitter window if (!m_wndSplitter.CreateStatic(this, 1, 2)) return FALSE; // Create left and right pane...
  • 一个使用Windows C++ API创建普通窗口的实例
  • 主题 软件开发 Windows编程之注册窗口类 介绍了 注册窗口类。... 我们用Visual Studio创建一个win32项目上会自动生成一个创建窗体函数。如下:  // // 函数: InitInstance(HINSTANCE, int) /

空空如也

空空如也

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

c++创建窗口

c++ 订阅