zoukankan      html  css  js  c++  java
  • <Win32_13>__win32控件(1)__教你玩美观的按钮控件

    从今天开始,我将开始仔细讲一下win32中比较重要的一些控件的用法

    好了,开始今天的讲解

    一、初级篇——创建一般的按钮控件

    按钮实质上就是窗口,因此它的创建本质上和创建窗口是一样的,也是用CreateWindow或者CreateWindowEx方法来创建,只不过有一些细节需要注意一下:

    (1)在窗口风格中必须添加WS_CHILD,表示它是子窗口,属于一个父窗口;如果为了使按钮一创建就可见,就还得加上WS_VISIBLE

    (2)CreateWindow或者CreateWindowEx中HMENU hMenu参数在创建子窗口时,是表示窗口的ID标示,在这里就表示按钮的ID标示

    (3)win32所有控件的消息都归结到WM_COMMAND系统标准消息,看一看msdn关于这个消息的说明:

    LRESULT CALLBACK WindowProc(
      HWND hwnd,       // handle to window
      UINT uMsg,       // WM_COMMAND
      WPARAM wParam,   // notification code and identifier
      LPARAM lParam    // handle to control (HWND)
    );
    

    重要的是wParam、lParam这两个参数:前者是一些通知码和标示(ID)、后者是对应的句柄

    好了,接下来看看代码:

    switch(message)
    {
    case WM_CREATE:
    	SkinH_Attach();
    
    	//创建按钮
    	for(i=0; i<NUM; i++)
    	{
    		LONG BtnStyle = WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_BITMAP;
    
    		hButton[i] = CreateWindow(TEXT("button"), tBtnName[i],
    					BtnStyle,
    					0, 0, 0, 0, hwnd, (HMENU)iBtnID[i],
    					((LPCREATESTRUCT)lParam)->hInstance, NULL);
    
    		SetWindowText(hButton[i], tBtnName[i]);//设置按钮文本
    			
    		//创建字体
    		ZeroMemory(&lf, sizeof(LOGFONT));
    		lf.lfHeight		= -14;//字体的大小
    		hFont = CreateFontIndirect(&lf);
    
    		//修改字体
    		SendMessage(hButton[i], WM_SETFONT, (WPARAM)hFont, 0);
    	}
      	return 0 ;


     

    //随着主窗口大小的改变来改变按钮的位置

    case WM_SIZE:
    	cyButton = HIWORD(lParam) / (NUM + 2);
    
    	//通过适应窗口大小  来设定按钮的位置
    	for(i=0; i<NUM; i++)
    	{
    		MoveWindow(hButton[i], 100, cyButton * (i + 1), 100, 60, TRUE);
    	}
      	return 0 ;


    //简单响应按钮按下的消息

    case WM_COMMAND:
    	switch(wParam)
    	{
    	case IDB_PUSHBUTTON1:
    		MessageBox(hwnd, TEXT("按下按钮1"), TEXT("提示"), MB_OK);
    		break;
    	case IDB_PUSHBUTTON2:
    		MessageBox(hwnd, TEXT("按下按钮2"), TEXT("提示"), MB_OK);
    		break;
    	case IDB_PUSHBUTTON3:
    		MessageBox(hwnd, TEXT("按下按钮3"), TEXT("提示"), MB_OK);
    		break;
    	}
    	return 0;


    运行效果:


    二、中级篇——创建win XP风格的按钮

    如果你有MFC的开发经验,你应该比较喜欢MFC的按钮控件吧——OK,现在教你如何创建MFC样式的按钮

    这个首先要看一看msdn相关的说明:

    修改控件的风格

     

    看完之后,你就应该知道怎么办了吧?

    对,就在头文件中添加以下代码即可:

    // Copy from MSDN   
    #pragma comment(linker,""/manifestdependency:type='win32' "
    						"name='Microsoft.Windows.Common-Controls' "
    						"version='6.0.0.0' processorArchitecture='*' "
    						"publicKeyToken='6595b64144ccf1df' language='*'"")


    他就是是编译器使用Win XP的新式控件风格

     

    ok,还是来看看效果:

     

    这就是比较现代化的风格了,很漂亮

     

    三、高级篇——给按钮添上"美丽的衣裳"——来一张位图

    可能,你很清楚窗口添加位图的方式和方法,也许你会觉得这些方式方法稍微麻烦点儿,因此我得告诉你:给按钮添加位图是很容易的事儿

     

    (1)首先加载位图,获取位图句柄

    (2)发送消息,告诉Windows,当前按钮以这个位图作为背景图片

     

    具体代码如下:

    在WM_CREATE消息中做这些事儿

    {
    	HBITMAP	hBmp;//位图句柄
    
    	//加载
    	hBmp = LoadBitmap(((LPCREATESTRUCT)lParam)->hInstance,
    					   MAKEINTRESOURCE(iBmpID[i]));
    
    	//发送消息
    	SendMessage(hButton[i], BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBmp);
    }


    来看看效果吧:

     

    源代码以及相关资源下载

  • 相关阅读:
    让思考成为一种习惯:今年,我大四了
    asp.net core源码飘香:Logging组件
    asp.net core源码飘香:Options组件
    asp.net core源码飘香:Configuration组件
    asp.net core源码飘香:从Hosting开始
    webpack code split实现原理
    css specificity
    todo:read
    React Render Props 模式
    recompose mapProps 函数指南
  • 原文地址:https://www.cnblogs.com/bbsno1/p/3279668.html
Copyright © 2011-2022 走看看