zoukankan      html  css  js  c++  java
  • winapp | 窗口程序的win32子控件

    基于上一篇博客里的简单win32app实现:

    // windowsapp.cpp : Defines the entry point for the application.
    //
    
    #include "stdafx.h"
    
    HINSTANCE g_hInstance;         // 全局变量程序句柄
    
    // 定义子控件编号宏
    #define IDC_EDIT_1 0x100
    #define IDC_BUTTON_1 0x101
    #define IDC_BUTTON_2 0x102
    
    
    LRESULT CALLBACK WindowProc(HWND hwnd,
    							UINT uMsg,
    							WPARAM wParam,
    							LPARAM LParam){
    	// 窗口程序
    	// 处理消息队列的消息
    	switch (uMsg)
    	{
    	case WM_CREATE:          // 窗口被创建出来的消息
    		//创建子控件
    		//创建文本框
    		CreateWindow(
    			"EDIT",                             // 注册的类名 这里是文本框
    			"",                 // 窗口名
    			WS_CHILD|WS_VISIBLE|WS_VSCROLL|ES_MULTILINE,         // 窗口风格
    			0,
    			0,                                   // 相对于父窗口的x,y坐标
    			300,
    			300,                                 // 宽高
    			hwnd,                                  // 父窗口的句柄
    			(HMENU)IDC_EDIT_1,                                 // 菜单句柄如果是子窗口就是身份标识
    			g_hInstance,                        // 是属于哪个模块的
    			NULL                              // 附加数据 空
    		);
    		//创建两个按钮
    		CreateWindow(
    			"BUTTON",                             // 注册的类名 这里是文本框
    			"设置",                 // 窗口名
    			WS_CHILD|WS_VISIBLE,         // 窗口风格
    			300,
    			0,                                   // 相对于父窗口的x,y坐标
    			60,
    			30,                                 // 宽高
    			hwnd,                                  // 父窗口的句柄
    			(HMENU)IDC_BUTTON_1,                                 // 菜单句柄
    			g_hInstance,                        // 是属于哪个模块的
    			NULL                              // 附加数据 空
    		);
    		CreateWindow(
    			"BUTTON",                             // 注册的类名 这里是文本框
    			"获取",                 // 窗口名
    			WS_CHILD|WS_VISIBLE,         // 窗口风格
    			300,
    			100,                                   // 相对于父窗口的x,y坐标
    			60,
    			30,                                 // 宽高
    			hwnd,                                  // 父窗口的句柄
    			(HMENU)IDC_BUTTON_2,                                 // 菜单句柄
    			g_hInstance,                        // 是属于哪个模块的
    			NULL                              // 附加数据 空
    		);
    
    		break;
    	case WM_COMMAND:    // 按钮发过来的消息
    		switch (LOWORD(wParam))
    		{
    		case IDC_BUTTON_1:
    			SetDlgItemText(hwnd, IDC_EDIT_1, TEXT("测试"));
    			break;
    		case IDC_BUTTON_2:
    			break;
    		}
    		break;
    	case WM_DESTROY:
    		PostQuitMessage(0);    // 让当前程序退出
    		break;
    	}
    
    	return DefWindowProc(hwnd, uMsg, wParam, LParam); // 调用默认的消息处理函数
    }
    
    
    int APIENTRY WinMain(HINSTANCE hInstance,           // 句柄 模块的起始位置
                         HINSTANCE hPrevInstance,       // 永远为空
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
     	/*
    	DWORD dwAddr = (DWORD)hInstance;
    	char szOutBuff[0x80];
    	sprintf(szOutBuff, "module place: 0x%X 
    ", dwAddr);   // 打印模块起始地址
    	OutputDebugString(szOutBuff);
    	*/
    	
    	// 给全局变量句柄赋值
    	g_hInstance = hInstance;
    
    	// 第一步:定义窗口是什么样的
    	TCHAR className[] = TEXT("My first Window");
    	WNDCLASS wndclass = {0};                // 窗口类初始化
    	wndclass.hbrBackground = (HBRUSH)COLOR_WINDOW;//背景色
    	wndclass.lpszClassName = className;             // 窗口类名
    	wndclass.hInstance = hInstance;               // 窗口是属于哪个程序的
    	wndclass.lpfnWndProc = WindowProc;            // 窗口程序(窗口过程函数地址)
    
    	// 第二步:注册窗口类
    	RegisterClass(&wndclass);        // 让操作系统知道你这个窗口
    
    	// 第三步:创建并显示窗口
    	HWND hwnd = CreateWindow(
    		className,                             // 注册的类名
    		TEXT("Mz1小工具"),                 // 窗口名
    		WS_OVERLAPPEDWINDOW,                   // 窗口风格
    		100,
    		100,                                   // 相对于父窗口的x,y坐标
    		600,
    		300,                                 // 宽高
    		NULL,                                  // 父窗口的句柄
    		NULL,                                 // 菜单句柄
    		hInstance,                        // 是属于哪个模块的
    		NULL                              // 附加数据 空
    		);
    
    	// 第四步:显示窗口
    	ShowWindow(hwnd, SW_SHOW);         // 默认形式显示
    
    	// 第五步:接收消息并处理
    	MSG msg;          // 用于接收消息的结构体
    	BOOL bRet; 
    	while((bRet = GetMessage( &msg, NULL, 0, 0)) != 0){// 参数2:取哪个窗口的消息,如果为空,就是取所有的
    		if (bRet == -1){
    			// handle the error
    		}else{
    			TranslateMessage(&msg); // 转换消息
    			DispatchMessage(&msg);   // 分发消息 给消息处理函数处理
    		}
    	}
    	return 0;
    }
    

    本文来自博客园,作者:Mz1,转载请注明原文链接:https://www.cnblogs.com/Mz1-rc/p/15162296.html

  • 相关阅读:
    75. Sort Colors
    101. Symmetric Tree
    121. Best Time to Buy and Sell Stock
    136. Single Number
    104. Maximum Depth of Binary Tree
    70. Climbing Stairs
    64. Minimum Path Sum
    62. Unique Paths
    css知识点3
    css知识点2
  • 原文地址:https://www.cnblogs.com/Mz1-rc/p/15162296.html
Copyright © 2011-2022 走看看