• winapp | 用win32api创建窗口程序


    主要的过程都写在下面代码中的注释里啦:

    // windowsapp.cpp : Defines the entry point for the application.
    //
    
    #include "stdafx.h"
    
    LRESULT CALLBACK WindowProc(HWND hwnd,
    							UINT uMsg,
    							WPARAM wParam,
    							LPARAM LParam){
    	// 窗口程序
    	// 处理消息队列的消息
    	switch (uMsg)
    	{
    	case WM_DESTROY:
    		PostQuitMessage(0);    // 让当前程序退出
    		return 0;
    	}
    
    	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);
    	*/
    	
    	// 第一步:定义窗口是什么样的
    	TCHAR className[] = TEXT("My first Window");
    	WNDCLASS wndclass = {0};                // 窗口类初始化
    	wndclass.hbrBackground = (HBRUSH)COLOR_BACKGROUND;//背景色
    	wndclass.lpszClassName = className;             // 窗口类名
    	wndclass.hInstance = hInstance;               // 窗口是属于哪个程序的
    	wndclass.lpfnWndProc = WindowProc;            // 窗口程序(窗口过程函数地址)
    
    	// 第二步:注册窗口类
    	RegisterClass(&wndclass);        // 让操作系统知道你这个窗口
    
    	// 第三步:创建并显示窗口
    	HWND hwnd = CreateWindow(
    		className,                             // 注册的类名
    		TEXT("我的第一个窗口"),                 // 窗口名
    		WS_OVERLAPPEDWINDOW,                   // 窗口风格
    		10,
    		10,                                   // 相对于父窗口的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/15161792.html

  • 相关阅读:
    单击按钮左键弹起菜单
    高亮选中MEMO某一行
    DelphiTXT文档编辑器
    桌面名人名言
    判断richtextbox选中的是否为图片
    数组
    解决Linux下IDEA无法使用ibus输入法的问题和tip乱码
    Spring实现AOP的多种方式
    java术语(PO/POJO/VO/BO/DAO/DTO)
    idea intellij对Spring进行单元测试
  • 原文地址:https://www.cnblogs.com/Mz1-rc/p/15161792.html
Copyright © 2020-2023  润新知