文档章节

创建控件按钮

努力喵
 努力喵
发布于 2015/11/08 22:57
字数 585
阅读 70
收藏 0
#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

HINSTANCE hInst;

/* The 'main' function of Win32 GUI programs: this is where execution starts */
int WINAPI WinMain(
    HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow)
{
 
    static TCHAR szClassName[] = TEXT("HelloWin"); /*窗口类名*/
    HWND hwnd;  /*窗口句柄*/
    MSG msg;    /*消息*/
    WNDCLASS wndclass;   /*窗口类*/ 
    
    hInst = hInstance;
    
    /***********第一步:注册窗口类*************/
    /*为窗口类各个字段赋值*/
    wndclass.style = CS_HREDRAW | CS_VREDRAW;  /*窗口风格*/
    wndclass.lpfnWndProc  = WndProc; /*窗口过程*/
    wndclass.cbClsExtra   = 0;
    wndclass.cbWndExtra   = 0;
    wndclass.hInstance    = hInstance;  /*当前窗口句柄*/
    wndclass.hIcon        = LoadIcon(NULL, IDI_APPLICATION);  /*窗口图标*/
    wndclass.hCursor      = LoadCursor(NULL, IDC_ARROW);/*鼠标样式*/
    wndclass.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH);/*窗口背景画刷*/
    wndclass.lpszMenuName = NULL;  /*窗口菜单*/
    wndclass.lpszClassName= szClassName; /*窗口类名*/
    
    
    /*注册窗口*/
    RegisterClass(&wndclass);
    
    /*************第二步:创建窗口(并让窗口显示出来)***************/
    hwnd = CreateWindow(
        szClassName,  /*窗口名字*/
        TEXT("Welcome"), /*窗口标题*/
        WS_OVERLAPPEDWINDOW,  /*窗口风格*/
        CW_USEDEFAULT,  /*初始化x轴的位置*/
        CW_USEDEFAULT,  /*初始化y轴的位置*/
        640,  /*窗口宽度*/
        480,  /*窗口高度*/
        NULL, /*父窗口句柄*/
        NULL, /*窗口菜单句柄*/
        hInstance, /*当前窗口句柄*/
        NULL    /*不使用该值*/
        );
        
    if(hwnd == NULL)
    {
        MessageBox(NULL, "创建窗口出错!", "Error", MB_OK);
        return -1;
    }

        
    /*显示窗口*/
    ShowWindow(hwnd, nCmdShow);
    /*更新(绘制)窗口*/
    UpdateWindow(hwnd);
    
    
    /*************第三步:消息循环*************/
    while(GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);  /*翻译消息*/
        DispatchMessage(&msg);   /*分派消息*/
    }
    return msg.wParam; /*当GetMessage程序返回FALSE是程序结束*/
}

/*************第四步:窗口过程*****************/
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent; 
    HDC hdc;
    PAINTSTRUCT ps;
    static HFONT hFont; //声明一个逻辑字体句柄 
    static HWND hBtn;   // 声明一个按钮控件 
    
    switch(message)
    {
        case WM_CREATE:
        {
            //创建逻辑字体 
            hFont = CreateFont(
                -20/*高度*/, -10/*宽度*/,0,0,400/*一般设值为400*/,
                FALSE/*不带斜体*/, FALSE/*不带下划线*/,FALSE/*不带删除线*/,
                DEFAULT_CHARSET, //使用默认字符集
                OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS,
                DEFAULT_QUALITY, //默认输出质量
                FF_DONTCARE, //不指定字体族
                TEXT("微软雅黑") //字体名
            );
        
            //创建按钮控件
            hBtn = CreateWindow(
                TEXT("Button"), //按钮控件类名
                TEXT("这是按钮"),
                WS_CHILD | WS_VISIBLE | BS_FLAT/*扁平样式*/,
                30/*X坐标*/,20/*Y坐标*/, 150/*宽度*/,50/*高度*/,
                hWnd,
                (HMENU)2/*控件唯一标识符*/, 
                hInst,
                NULL 
            );
        
            //设置按钮字体
            SendMessage(
                hBtn, //欲设置字体的按钮句柄
                WM_SETFONT,  //消息名(消息类型)
                (WPARAM)hFont, //字体句柄
                NULL
            );
            break;
        }
        
        case WM_PAINT:
        {
            hdc = BeginPaint(hWnd, &ps);
            
            //Ellipse(hdc, 0, 100, 200, 200);
            
            EndPaint(hWnd, &ps);
            break;
        }
            
        /*窗口销毁消息*/
        case WM_DESTROY:
        {
            /*处理WM_DESTROY消息时删除之前我们创建的一切GDI对象*/
            DeleteObject(hFont); //删除创建的字体
            PostQuitMessage(0);
            break;
        }
        default:
        {
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
    }
    return 0;
}


© 著作权归作者所有

下一篇: 创建控件字体
努力喵
粉丝 5
博文 105
码字总数 34117
作品 0
广州
私信 提问
VC中动态添加控件

动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的。   一、创建动态控件:   为了对照,我们先来看一下静态控件的创建。   放置静态控件时必须先建立...

郝槟楠
2011/12/01
0
0
在高通410c开发板使用PyQt开发电动窗帘Demo(四)

本文继续介绍在高通410c开发板上开发电动窗帘Demo的开发步骤 使用QtDesigner开发UI 7. 任务列表操作 创建Push Button控件到主窗体中,作为添加任务列表按钮,设置如下: 创建Push Button控件...

conglf
2018/05/11
0
0
u3d学习笔记二:unity事件机制的实现

事件机制广泛的存在于MVC架构中,事件机制的灵活性使我们的开发更为方便,下面对unity中事件机制的实现就个人的理解做一个简单的讲解: 一、直接绑定 直接创建button控件 创建testClick脚本,...

zds_c
2018/04/17
0
0
UI视图交互与事件机制

一、UIButon控件详解 <一>UIButton与UILabel的区别与联系 联系:都是UIView的直接或间接的子类,都具有UIView的属性和行为,UIView代表及其子类都代表一个矩形区域。 区别: 1、UILabel是直接...

迷途阳
2016/02/23
42
0
UIView的常见属性

//@property(nonatomic,readonly) UIView *superview; //获得自己的父控件对象 //@property(nonatomic,readonly,copy) NSArray *subviews; 获得自己的所有子控件对象 //@property(nonatomic)......

5vinsEnt
2016/04/15
14
0

没有更多内容

加载失败,请刷新页面

加载更多

启动参数

常用启动参数,通过 -Dxx.yy=zz注入应用参数 -Deureka.instance.metadata-map.starkGroup=test3 -Dserver.port=8989 本地调试过程中,可改变端口来启动多个相同服务。修改启动的VM参数即可...

ZH-JSON
14分钟前
4
0
ES配置修改

查看配置 GET /_cluster/settings 修改配置 PUT /_cluster/settings{ "persistent" : { "xpack" : { "monitoring" : { "collection" : { "enabled" : ......

messud4312
26分钟前
3
0
Spring事务传播属性有那么难吗?看这一篇就够了

Spring事务传播属性有那么难吗?看这一篇就够了 笔者文笔功力尚浅,如有不妥,请慷慨指出,必定感激不尽 学习东西要知行合一,如果只是知道理论而没实践过,那么掌握的也不会特别扎实,估计过...

不学无数的程序员
26分钟前
4
0
VMware vSphere ESXi主机的访问控制

在vShpere中,访问ESXi主机的途径很多,如下: ESXi DCUI ESXi Shell ESXi SSH ESXi Host Client vCenter --> vSphere web client / vSphere Client VMware vSphere ESXi主机的访问控制,除了......

大别阿郎
51分钟前
5
0
大神讲解CGI、FastCGI和PHP-FPM关系图解

参考资料 概念了解:CGI,FastCGI,PHP-CGI与PHP-FPM:http://www.nowamagic.net/librarys/veda/detail/1319 php中fastcgi和php-fpm是什么东西:https://www.zybuluo.com/phper/note/50231 ......

网络小虾米
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部