Win32窗口编程C++

编译器:VC++6.0

工作区创建

1、右上角“文件”----->创建,选择“Win32 Application”,输入工程名称;

2、点击“确定”,在弹出的窗口选中“一个简单的Win32 程序”,点击“完成”。

3、创建成功如图所示

窗口类结构体WNDCLASSEX:

typedef struct
{
    UINT cbSize;
    UINT style;
    WNDPROC lpfnWndProc;
    int cbClsExtra;
    int cbWndExtra;
    HINSTANCE hInstance;
    HICON hIcon;
    HCURSOR hCursor;
    HBRUSH hbrBackground;
    LPCTSTR lpszMenuName;
    LPCTSTR lpszClassName;
    HICON hIconSm;
} WNDCLASSEX, *PWNDCLASSEX;

1.  cbSize  : WNDCLASSEX 的大小。在调用GetClassInfoEx前必须要先设置它值。我们可以用sizeof(WNDCLASSEX)来获得准确的值。
2.  style : 窗口类的样式,它的值可以是窗口样式值的任意组合。细看Win32窗口类样式WNDCLASS.style_lihan.cs的博客

3.  lpfnWndProc  指向窗口处理函数(回调函数)。处理窗口事件,像单击鼠标会怎样,右击鼠标会怎样,都是由此函数控制的。

4.  cbClsExtra  为窗口类的额外信息做记录,初始化为0。
5.  cbWndExtra 记录窗口实例的额外信息,系统初始为0.如果程序使用WNDCLASSEX注册一个从资源文件里创建的对话框,则此参数必须设置为DLGWINDOWEXTRA
6.  hInstance: 本模块的事例句柄。
7.  hIcon  窗口类的图标,为资源句柄,如果设置为NULL,系统将为窗口提供一个默认的图标。
8.  hCursor 窗口类的鼠标样式,为鼠标样式资源的句柄,如果设置为NULL,系统提供一个默认的鼠标样式。
9.  hbrBackground 窗口类的背景刷,为背景刷句柄,也可以为系统颜色值,如果颜色值已给出,则必须转化为以下的HBRUSH的值
·   COLOR_ACTIVEBORDER
·   COLOR_ACTIVECAPTION
·   COLOR_APPWORKSPACE
·   COLOR_BACKGROUND
·   COLOR_BTNFACE
·   COLOR_BTNSHADOW
·   COLOR_BTNTEXT
·   COLOR_CAPTIONTEXT
·   COLOR_GRAYTEXT
·   COLOR_HIGHLIGHT
·   COLOR_HIGHLIGHTTEXT
·   COLOR_INACTIVEBORDER
·   COLOR_INACTIVECAPTION
·   COLOR_MENU
·   COLOR_MENUTEXT
·   COLOR_SCROLLBAR
·   COLOR_WINDOW
·   COLOR_WINDOWFRAME
·   COLOR_WINDOWTEXT
10. lpszMenuName  指向一个以NULL结尾的字符串,同目录资源的名字一样。如果使用整型id表示菜单,可以用MAKEINTRESOURCE定义一个宏。如果它的值为NULL,那么该类创建的窗口将都没有默认的菜单。
11. lpszClassName  指向窗口类的指针,LPSTR类型。
12. hIconSm  小图标的句柄,在任务栏显示的图标,可以和上面的那个一样。

Win32窗口类样式WNDCLASS.style

 Win32窗口类样式WNDCLASS.style_lihan.cs的博客-CSDN博客

CreateWindowEx详解 

 CreateWindowEx详解 - Please Call me 小强 - 博客园 (cnblogs.com)

LoadIcon的使用

 LoadIcon的使用 - N3verL4nd - 博客园 (cnblogs.com)

函数MessageBox(NULL,"","",,MB_OK)

c语言窗体编辑框框函数,函数MessageBox(NULL,"","",,MB_OK);中参数作用

c# WndProc事件 消息类型

c# WndProc事件 消息类型_weixin_34272308的博客-CSDN博客

fatal error C1083

错误提示:

fatal error C1083: Cannot open precompiled header file: /'Debug/v13_3.pch/':

No such file or directory

在网上搜集了一下,这个错误是预编译文件的设置造成的,有几种可以尝试的途径:

1)单独编译StdAfx.cpp

2)编译所有(即按Ctrl+F7)

3)在工程-设置-c++-最下面的工程选项里去掉××。pch文件

4)在工程-设置-c++-在分类里选择预编译头文件,选择自动使用预补偿页眉,或者选择不使用预补偿头

在Windows下使用C++Win32 API进行主进程与子线程间的通信,主要有几种常见的方法: 1. **全局变量**:可以使用共享内存的方式,通过声明全局变量,在主进程中设置值,然后创建的子线程可以直接读取或修改这个变量。 ```cpp // 主线程 global_variable = some_value; CreateThread(...); // 子线程 int value = global_variable; ``` 2. **消息队列(Message Queue, MSG Queues)**:这是一种可靠且跨进程的通信机制。主线程发送消息到队列,子线程可以从队列中接收并处理。 ```cpp HANDLE hQueue = CreateMessageQueue(NULL, ...); PostQueuedMessage(hQueue, ...); // 发送消息 while (PeekMessage(&msg, hQueue, ..., ...)) { // 子线程循环接收消息 TranslateMessage(&msg); DispatchMessage(&msg); } ``` 3. **管道(Pipe)**:进程间也可以通过管道进行双向数据传输。创建管道时,一个用于主线程写入,另一个供子线程读取。 ```cpp HANDLE pipe_read, pipe_write; if (!CreatePipe(&pipe_read, &pipe_write, NULL, ...)) { // 错误处理 } // 主线程写入数据 WriteFile(pipe_write, ..., ...); CloseHandle(pipe_write); // 子线程读取数据 char buffer[...]; ReadFile(pipe_read, buffer, ..., ...); CloseHandle(pipe_read); ``` 4. **共享内存(Mapped Files)**:如果需要频繁交换大块数据,可以考虑映射文件到内存空间进行操作。 ```cpp HFILE file_map = CreateFileMapping(...); void* mapped_data =MapViewOfFile(file_map, ..., ...); // 主线程和子线程在这里对mapped_data进行操作 UnmapViewOfFile(mapped_data); CloseHandle(file_map); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值