SDK按钮控件的实现

原创 2003年02月28日 09:20:00

高手就别看了!

我是一个SDK的初学者,下面准备学习VC。我经历了SDK的初学者的痛苦。很多书上的程序都是一些稍微复杂一些的程序。因此,我将自己调试的一些小程序,功能单一,并附上程序的详细说明,以帮助和我一样的初学者。

/////////下面是程序

/*------------------------------------------
  这个程序主要练习如何实现按钮
  显示各种按钮控件的效果,控件上的名称即为按钮的设置风格

  ------------------------------------------*/

#include <windows.h>

//下面定义菜单ID的具体数值
#define ID_PUSHME1 1
#define ID_PUSHME2 2
#define ID_PUSHME3 3
#define ID_PUSHME4 4
#define ID_PUSHME5 5
#define ID_PUSHME6 6
#define ID_PUSHME7 7
#define ID_PUSHME8 8
#define ID_PUSHME9 9
#define ID_PUSHME10 10
#define ID_PUSHME11 11
#define ID_PUSHME12 12

//窗口函数的说明
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM) ;


/////////////////////////////////////////////////////////////////////////
//主函数WinMain(),主要用来创建主窗口,并建立消息循环机制
//可使系统调用窗口函数WndProc()
//在Windows编程过程中,这个函数基本上结构一样的
//程序员一般不做太多的变动
////////////////////////////////////////////////////////////////////////
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
              PSTR szCmdLine, int iCmdShow)
     {
     static char  szAppName[] = "About1" ;
     MSG          msg ;
     HWND         hwnd ;
    
  //////////////////////////////////////////////////////
  ////注册窗口类
  WNDCLASSEX   wndclass ;

     wndclass.cbSize        = sizeof (wndclass) ;
     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
     wndclass.lpfnWndProc   = WndProc ;
     wndclass.cbClsExtra    = 0 ;
     wndclass.cbWndExtra    = 0 ;
     wndclass.hInstance     = hInstance ;
     wndclass.hIcon         = LoadIcon (hInstance, szAppName) ;
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
     wndclass.lpszMenuName  = NULL;
     wndclass.lpszClassName = szAppName ;
     wndclass.hIconSm       = LoadIcon (hInstance, szAppName) ;

     RegisterClassEx (&wndclass) ;

  /////////////////////////////////////////////////////////////
  //创建窗口
     hwnd = CreateWindow (szAppName, "控件实现",
                          WS_OVERLAPPEDWINDOW,
                 CW_USEDEFAULT, CW_USEDEFAULT,
                 CW_USEDEFAULT, CW_USEDEFAULT,
                          NULL, NULL, hInstance, NULL) ;
    
 
  /////////////////////////////////////////////////////////////
     //显示和更新窗口
  ShowWindow (hwnd, iCmdShow) ;
     UpdateWindow (hwnd) ;

  //////////////////////////////////////////////////////////////
  //消息循环机制
     while (GetMessage (&msg, NULL, 0, 0))
          {
          TranslateMessage (&msg) ;
          DispatchMessage (&msg) ;
          }
    
  return msg.wParam ;        ////表示从PostQuitMessage返回的值

     }


/////////////////////////////////////////////////////////////////////////////////
//以下是窗口函数,这里是程序员主要编程的地方
//程序员可根据各种消息而设定各种效果,这里也是学习SDK主要要学习的地方
/////////////////////////////////////////////////////////////////////////////////
LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
     {
    
 
 static HINSTANCE hInstance ;
   
 
 //各菜单句柄的说明
    static HWND hbtnWnd1,hbtnWnd2,hbtnWnd3,hbtnWnd4,
           hbtnWnd5,hbtnWnd6,hbtnWnd7, hbtnWnd8,
     hbtnWnd9,hbtnWnd10,hbtnWnd11,hbtnWnd12;


 //程序中用到的字符数组定义
    static char text[]="在这里设置此按钮为edit类型,表示将控件设定为编辑框控件,可以输入文本";    
 
 
 switch (iMsg)
          {
          case WM_CREATE :
              hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;
              
     hbtnWnd1=CreateWindow(
       "button",  //这里设定按钮的类型为button,其它类型有静态控件static,
                  //滚动条控件scrollbar,编辑框控件edit,列表框控件listbox

       "BS_AUTOCHECKBOX",   //这里设定按钮上显示的文本
       BS_AUTOCHECKBOX|WS_CHILD|WS_VISIBLE,
                   //按钮风格,其中必须有WS_CHILD风格,因为是子窗口,
          //这里可以设定按钮的风格和窗口的风格参数
       10,        
       40,          //(10,40)为按钮的左上角的坐标
       160,        //按钮的宽度
       30,         //按钮的高度
          hwnd,       //父窗口句柄
       (HMENU)ID_PUSHME1,        //子窗口ID,即按钮ID
       hInstance,   //实例句柄 
       NULL);       //额外参数
 
    
 ///////////////////////////////////////////////////////////
 // 下面一些按钮的定义同上面第一个按钮hbtnWnd1的定义相同,
 //  如果你只想定义一个按钮,下面11个按钮的内容你完全可以取消
 //  另外注意每个按钮的位置,长宽大小全一样
 ////////////////////////////////////////////////////////////
               hbtnWnd2=CreateWindow(
       "button",
       "BS_PUSHBUTTON",
       BS_PUSHBUTTON|WS_CHILD|WS_VISIBLE,
       180,
       40,
       160,
       30,
          hwnd,
       (HMENU)ID_PUSHME2,
       hInstance,
       NULL);

       hbtnWnd3=CreateWindow(
       "button",
       "BS_AUTORADIOBUTTON",
       BS_AUTORADIOBUTTON|WS_CHILD|WS_VISIBLE,
       350,
       40,
       180,
       30,
          hwnd,
       (HMENU)ID_PUSHME3,
       hInstance,
       NULL);

     hbtnWnd4=CreateWindow(
       "button",
       "BS_CHECKBOX",
       BS_CHECKBOX|WS_CHILD|WS_VISIBLE,
       540,
       40,
       180,
       30,
          hwnd,
       (HMENU)ID_PUSHME4,
       hInstance,
       NULL);

     hbtnWnd5=CreateWindow(
       "button",
       "BS_AUTO3STATE",
       BS_AUTO3STATE|WS_CHILD|WS_VISIBLE,
       10,
       80,
       160,
       30,
          hwnd,
       (HMENU)ID_PUSHME5,
       hInstance,
       NULL);
     
               hbtnWnd6=CreateWindow(
       "button",
       "BS_DEFPUSHBUTTON ",
       BS_DEFPUSHBUTTON|WS_CHILD|WS_VISIBLE,
       180,
       80,
       160,
       30,
          hwnd,
       (HMENU)ID_PUSHME6,
       hInstance,
       NULL);

       hbtnWnd7=CreateWindow(
       "button",
       "BS_GROUPBOX",
       BS_GROUPBOX|WS_CHILD|WS_VISIBLE,
       350,
       80,
       180,
       30,
          hwnd,
       (HMENU)ID_PUSHME7,
       hInstance,
       NULL);

     hbtnWnd8=CreateWindow(
       "button",
       "BS_LEFTTEXT",
       BS_LEFTTEXT|WS_CHILD|WS_VISIBLE,
       540,
       80,
       180,
       30,
          hwnd,
       (HMENU)ID_PUSHME8,
       hInstance,
       NULL);

                  hbtnWnd9=CreateWindow(
       "button",
       "BS_RADIOBUTTON",
       BS_RADIOBUTTON|WS_CHILD|WS_VISIBLE,
       10,
       120,
       160,
       30,
          hwnd,
       (HMENU)ID_PUSHME9,
       hInstance,
       NULL);
     
               hbtnWnd10=CreateWindow(
       "button",
       "BS_3STATE",
       BS_3STATE|WS_CHILD|WS_VISIBLE,
       180,
       120,
       160,
       30,
          hwnd,
       (HMENU)ID_PUSHME10,
       hInstance,
       NULL);

       hbtnWnd11=CreateWindow(
       "scrollbar",   //滚动条控件,点击此按钮并拖动鼠标可使窗口大小变化
        "BS_OWNERDRAW  ", //自定义控件
       BS_OWNERDRAW|WS_CHILD|WS_VISIBLE,
       350,
       120,
       180,
       30,
          hwnd,
       (HMENU)ID_PUSHME11,
       hInstance,
       NULL);


 ////////////////////////////////////////////////////////////////////
 ///下面一个是编辑框按钮,你可以在其中输入文字,具有一个简单的写字板的
    ///功能,可以复制、粘贴、剪切等操作
 ///////////////////////////////////////////////////////////////////
     hbtnWnd2=CreateWindow(
       "edit",    //在这里设置此按钮为edit类型,表示将控件设定为编辑框控件
       text,      //字符型数组在前面已经定义,在这里显示它的内容
       WS_CHILD|WS_VISIBLE|ES_MULTILINE|ES_AUTOVSCROLL|ES_AUTOHSCROLL
        |WS_HSCROLL|WS_VSCROLL|ES_LEFT|WS_BORDER,
       10,
       160,
       568,
       130,
          hwnd,
       (HMENU)ID_PUSHME12,
       hInstance,
       NULL);
    
     return 0 ;
                 
                   
          case WM_DESTROY :
               PostQuitMessage (0) ;
               return 0 ;
          }
          return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
     }


 

 

Spin(旋转按钮)控件

 1、旋转按钮控件    旋转按钮控件,也称为上下控件,是一对箭头按钮,用户点击它们来增加或减少某个值,比如一个滚动位置或先是在相应控件中的一个数字。       一个旋转按钮控件通常是与一个相伴的控...
  • liufei_learning
  • liufei_learning
  • 2010年08月13日 13:34
  • 1854

简述vc里响应button控件的lbuttondown事件的三种方法

      好久没更新blog了,自己这段时间里一直东看看,西看看,技术也没什么大的长进,再加上我的那本本出了点问题,拿去修理了,所以现在一直处于蛮颓废的状态。好了,废话少说,总之,自己振奋下吧。  ...
  • sx1989827
  • sx1989827
  • 2009年05月24日 13:42
  • 4636

SDK中创建控件和控件消息

控件是子窗口,它们是系统已经定义好的窗口类,因此不需要注册、也不需要写消息处理函数。在主窗口得到WM_CREATE消息时,建立子窗口即可。 二、实例//参数:窗口句柄,消息,消息参数,消息参数LRE...
  • suiyunonghen
  • suiyunonghen
  • 2008年07月03日 17:13
  • 10180

win32 (sdk) 按钮 Button以及 消息相应

button.c #include HINSTANCE appInstance; LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wPar...
  • u012997311
  • u012997311
  • 2016年11月19日 17:34
  • 2386

Qt---实现一组可拖动按钮

直接上代码 self-contained.h#ifndef SELFCONTAINED_H #define SELFCONTAINED_H#include #include #include ...
  • BIG_C_GOD
  • BIG_C_GOD
  • 2016年11月28日 21:00
  • 2149

VC++ WIN32 sdk实现按钮自绘详解.

  网上找了很多,可只是给出代码,没有详细解释,不便初学者理解.我就抄回冷饭.把这个再拿出来说说.实例图片:  首先建立一个标准的Win32 Application 工程.选择a simple Win...
  • geniusdot
  • geniusdot
  • 2007年03月03日 23:47
  • 15851

Qt实现按钮组件切换不同的内容组件

做Qt开发难免会遇到按钮组件,然后对内容组件进行切换的基础假设,
  • luoyun614
  • luoyun614
  • 2014年05月01日 16:12
  • 938

可拖动的Button

根据拖动手势实时位置实现可拖动的Button 直接上代码: /// 可以随意拖动位置的按钮组件 class SGMoveButton: UIButton { // MARK: - prop...
  • qq_34347441
  • qq_34347441
  • 2017年01月13日 10:03
  • 665

C++实现半透明按钮控件(PNG,GDI+)

  • Witch_Soya
  • Witch_Soya
  • 2011年10月20日 11:09
  • 3605

Windows SDK中的标准控件和通用控件

Windows标准控件,标准控件总是可用的。控件包括:静态控件、按钮控件、编辑框控件、列表框控件、组合框控件,滚动条等如表所示。Windows标准控件的类型StaticGroup BoxButtonC...
  • cml2030
  • cml2030
  • 2010年12月23日 09:13
  • 3293
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SDK按钮控件的实现
举报原因:
原因补充:

(最多只允许输入30个字)