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

  • 相关阅读:
    NOI2014题解
    BZOJ 3514 (动态树)
    [HNOI 2013] 旅行 (数学)
    [HNOI 2013] 消毒 (搜索,二分图匹配)
    大学的第一个自己的程序
    回归了
    OI——不后悔的两年
    对于民科吧s5_or吧友自增树的复杂度计算
    好久没有冒过泡了。。。
    非常无聊——STD::sort VS 基数排序
  • 原文地址:https://www.cnblogs.com/Mz1-rc/p/15162296.html
Copyright © 2011-2022 走看看