汇编代码:

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Sample code for < Win32ASM Programming 3rd Edition>
; by 罗云彬, http://www.win32asm.com.cn
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Control.asm
; 对话框资源中子窗口控件的使用方法
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 使用 nmake 或下列命令进行编译和链接:
; ml /c /coff Control.asm
; rc Control.rc
; Link /subsystem:windows Control.obj Control.res
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  .386
  .model flat, stdcall
  option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include  windows.inc
include  user32.inc
includelib user32.lib
include  kernel32.inc
includelib kernel32.lib
include  gdi32.inc
includelib gdi32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN equ 1000h
DLG_MAIN equ 1
IDB_1  equ 1
IDB_2  equ 2
IDC_ONTOP equ 101
IDC_SHOWBMP equ 102
IDC_ALOW equ  103
IDC_MODALFRAME equ 104
IDC_THICKFRAME equ 105
IDC_TITLETEXT equ 106
IDC_CUSTOMTEXT equ 107
IDC_BMP  equ 108
IDC_SCROLL equ 109
IDC_VALUE equ 110
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  .data?

hInstance dd ?
hBmp1  dd ?
hBmp2  dd ?
dwPos  dd ?

.const
szText1  db 'Hello, World!',0
szText2  db '嘿,你看到标题栏变了吗?',0
szText3  db '自定义',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  .code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam
  local @szBuffer[128]:byte

mov eax,wMsg
  .if eax == WM_CLOSE
   invoke EndDialog,hWnd,NULL
   invoke DeleteObject,hBmp1
   invoke DeleteObject,hBmp2
  .elseif eax == WM_INITDIALOG
;********************************************************************
; 设置标题栏图标
;********************************************************************
   invoke LoadIcon,hInstance,ICO_MAIN
   invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
;********************************************************************
; 初始化组合框
;********************************************************************
   invoke SendDlgItemMessage,hWnd,IDC_TITLETEXT,CB_ADDSTRING,0,addr szText1
   invoke SendDlgItemMessage,hWnd,IDC_TITLETEXT,CB_ADDSTRING,0,addr szText2
   invoke SendDlgItemMessage,hWnd,IDC_TITLETEXT,CB_ADDSTRING,0,addr szText3
   invoke SendDlgItemMessage,hWnd,IDC_TITLETEXT,CB_SETCURSEL,0,0
   invoke GetDlgItem,hWnd,IDC_CUSTOMTEXT
   invoke EnableWindow,eax,FALSE

invoke LoadBitmap,hInstance,IDB_1
   mov hBmp1,eax
   invoke LoadBitmap,hInstance,IDB_2
   mov hBmp2,eax
;********************************************************************
; 初始化单选钮和复选框
;********************************************************************
   invoke CheckDlgButton,hWnd,IDC_SHOWBMP,BST_CHECKED
   invoke CheckDlgButton,hWnd,IDC_ALOW,BST_CHECKED
   invoke CheckDlgButton,hWnd,IDC_THICKFRAME,BST_CHECKED
;********************************************************************
; 初始化滚动条
;********************************************************************
   invoke SendDlgItemMessage,hWnd,IDC_SCROLL,SBM_SETRANGE,0,100
  .elseif eax == WM_COMMAND
   mov eax,wParam
   .if ax == IDCANCEL
    invoke EndDialog,hWnd,NULL
    invoke DeleteObject,hBmp1
    invoke DeleteObject,hBmp2
;********************************************************************
; 更换图片   // 交换过程需要详细讲下
;********************************************************************
   .elseif ax == IDOK  
    mov eax,hBmp1       
    xchg eax,hBmp2
    mov hBmp1,eax
    invoke SendDlgItemMessage,hWnd,IDC_BMP,STM_SETIMAGE,IMAGE_BITMAP,eax
;********************************************************************
; 设置是否“总在最前面”
;********************************************************************
   .elseif ax == IDC_ONTOP
    invoke IsDlgButtonChecked,hWnd,IDC_ONTOP
    .if eax == BST_CHECKED
     invoke SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0,\
     SWP_NOMOVE or SWP_NOSIZE
    .else
     invoke SetWindowPos,hWnd,HWND_NOTOPMOST,0,0,0,0,\
     SWP_NOMOVE or SWP_NOSIZE
    .endif
;********************************************************************
; 演示隐藏和显示图片控件
;********************************************************************
   .elseif ax == IDC_SHOWBMP
    invoke GetDlgItem,hWnd,IDC_BMP
    mov ebx,eax
    invoke IsWindowVisible,ebx
    .if eax
     invoke ShowWindow,ebx,SW_HIDE
    .else
     invoke ShowWindow,ebx,SW_SHOW
    .endif
;********************************************************************
; 演示允许和灰化“更换图片”按钮
;********************************************************************
   .elseif ax == IDC_ALOW
    invoke IsDlgButtonChecked,hWnd,IDC_ALOW
    .if eax == BST_CHECKED
     mov ebx,TRUE
    .else
     xor ebx,ebx
    .endif
    invoke GetDlgItem,hWnd,IDOK
    invoke EnableWindow,eax,ebx
;********************************************************************
   .elseif ax == IDC_MODALFRAME
    invoke GetWindowLong,hWnd,GWL_STYLE
    and eax,not WS_THICKFRAME
    invoke SetWindowLong,hWnd,GWL_STYLE,eax
   .elseif ax == IDC_THICKFRAME
    invoke GetWindowLong,hWnd,GWL_STYLE
    or eax,WS_THICKFRAME
    invoke SetWindowLong,hWnd,GWL_STYLE,eax
;********************************************************************
; 演示处理下拉式组合框
;********************************************************************
   .elseif ax == IDC_TITLETEXT
    shr eax,16
    .if ax == CBN_SELENDOK
     invoke SendDlgItemMessage,hWnd,IDC_TITLETEXT,CB_GETCURSEL,0,0
     .if eax == 2
      invoke GetDlgItem,hWnd,IDC_CUSTOMTEXT
      invoke EnableWindow,eax,TRUE
     .else
      mov ebx,eax
      invoke SendDlgItemMessage,hWnd,IDC_TITLETEXT,CB_GETLBTEXT,ebx,addr @szBuffer
      invoke SetWindowText,hWnd,addr @szBuffer
      invoke GetDlgItem,hWnd,IDC_CUSTOMTEXT
      invoke EnableWindow,eax,FALSE
     .endif
    .endif
;********************************************************************
; 在文本框中输入文字
;********************************************************************
   .elseif ax == IDC_CUSTOMTEXT
    invoke GetDlgItemText,hWnd,IDC_CUSTOMTEXT,addr @szBuffer,sizeof @szBuffer
    invoke SetWindowText,hWnd,addr @szBuffer
   .endif
;********************************************************************
; 处理滚动条消息
;********************************************************************
  .elseif eax == WM_HSCROLL
   mov eax,wParam
   .if ax == SB_LINELEFT
    dec dwPos
   .elseif ax == SB_LINERIGHT
    inc dwPos
   .elseif ax == SB_PAGELEFT
    sub dwPos,10
   .elseif ax == SB_PAGERIGHT
    add dwPos,10
   .elseif ax == SB_THUMBPOSITION || ax == SB_THUMBTRACK
    mov eax,wParam
    shr eax,16
    mov dwPos,eax
   .else
    mov eax,TRUE
    ret
   .endif
   ; 在介绍MASM语句的时候提到过,.if dwPos >0语句只可以用来比较无符号数,所以在这里使用cmp指令自己构建测试分支而不是使用 .if伪指令。
   cmp dwPos,0
   jge @F
   mov dwPos,0
   @@:
   cmp dwPos,100
   jle @F
   mov dwPos,100
   @@:
   invoke SetDlgItemInt,hWnd,IDC_VALUE,dwPos,FALSE
   ; 当计算好新位置的时候要将位置设置回去,用户才会看到滚动条移动了,方法是向滚动条发送SBM_SETPOS消息
   ; 最后一个参数为TRUE表示设置后重新绘画滚动条。
   invoke SendDlgItemMessage,hWnd,IDC_SCROLL,SBM_SETPOS,dwPos,TRUE
;********************************************************************
  .else
   mov eax,FALSE
   ret
  .endif
  mov eax,TRUE
  ret

_ProcDlgMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
  invoke GetModuleHandle,NULL
  mov hInstance,eax
  invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
  invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  end start

资源代码:

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include  <resource.h>
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define ICO_MAIN  0x1000 //图标
#define DLG_MAIN  1
#define IDB_1   1
#define IDB_2   2
#define IDC_ONTOP  101
#define IDC_SHOWBMP  102
#define IDC_ALOW  103
#define IDC_MODALFRAME 104
#define IDC_THICKFRAME 105
#define IDC_TITLETEXT 106
#define IDC_CUSTOMTEXT 107
#define IDC_BMP   108
#define IDC_SCROLL  109
#define IDC_VALUE  110
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN ICON  "Main.ico"
IDB_1  BITMAP  "Picture1.bmp"
IDB_2  BITMAP  "Picture2.bmp"
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DLG_MAIN DIALOG 193, 180, 310, 134
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "对话框子窗口控制示例"
FONT 9, "宋体"
{
 GROUPBOX "选项", -1, 55, 5, 120, 100
 AUTOCHECKBOX "总在最前面", IDC_ONTOP, 65, 20, 100, 12
 AUTOCHECKBOX "显示图片", IDC_SHOWBMP, 65, 35, 100, 12
 AUTOCHECKBOX "允许更换图片", IDC_ALOW, 65, 50, 100, 12
 CONTROL "", -1, "Static", SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE, 60, 65, 110, 1
 AUTORADIOBUTTON "模态边框(&Modal Frame)", IDC_MODALFRAME, 65, 70, 100, 12, WS_TABSTOP
 AUTORADIOBUTTON "可变边框(&Thick Frame)", IDC_THICKFRAME, 65, 85, 100, 12, WS_TABSTOP
 GROUPBOX "标题栏文字", -1, 180, 5, 125, 100, BS_GROUPBOX
 COMBOBOX IDC_TITLETEXT, 190, 20, 105, 70, CBS_DROPDOWNLIST | WS_TABSTOP
 LTEXT "自定义文字:", -1, 190, 40, 105, 10
 EDITTEXT IDC_CUSTOMTEXT, 190, 55, 105, 12
 LTEXT "请在此选择显示在标题栏上面的文字,或者选择“自定义”后自行输入", -1, 191, 73, 105, 26, WS_BORDER
 CONTROL "", -1, "Static", SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE, 5, 110, 300, 1
 DEFPUSHBUTTON "更换图片(&C)", IDOK, 200, 115, 50, 14
 PUSHBUTTON "退出(&X)", IDCANCEL, 255, 115, 50, 14
 CONTROL IDB_1, IDC_BMP, "Static", SS_BITMAP | WS_CHILD | WS_VISIBLE, 5, 5, 40, 95
 SCROLLBAR IDC_SCROLL, 6, 118, 125, 10
 LTEXT "0", IDC_VALUE, 138, 119, 50, 8
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

win32 20子窗口控件的代码相关推荐

  1. 【转】Win32子窗口控件(按钮、编辑框、静态框、滚动条等)!!

    前言: 子窗口控件是特殊的子窗口,不需要我们注册窗口类,系统已经注册好了,我们只需要在创建时选择相应的窗口类名.常用的子窗口控件有按钮BUTTON.组合框COMBOBOX.编辑框EDIT.列表框LIS ...

  2. 简介子窗口控件(api)

    子窗口控件 壹佰软件开发小组  整理编译   回忆第七章的CHECKER程序.这些程序显示了矩形网格.当您在一个矩形中按下鼠标按键时,该程序就画一个x:如果您再按一次鼠标按键,那么x就消失.虽然这个程 ...

  3. 《Windows程序设计》读书笔九 子窗口控件

    第九章 子窗口控件 子窗口可以作为控制屏幕图形显示,响应用户输入,以及在有重要输入事件的时候通知另一窗口. 标准子窗口控件,按钮,复选框,编辑框,列表框,组合框,文本字符串和滚动条. 可以使用Crea ...

  4. Windows程序设计-子窗口控件

    按钮类别 /*----------------------------------------BTNLOOK.C -- Button Look Program(c) Charles Petzold, ...

  5. C++ Windows窗口程序:子窗口控件之按钮类button

    Windows窗口程序设计中,按钮.文本编辑框等控件都作为一个子窗口在WM_CREATE事件中创建的.其中按钮类button有多种类型和风格,常见的单选钮.复选钮.分组框也在此类中,见下表: 子窗口控 ...

  6. 子窗口控件 -windows程序设计(网易小海星的博客)

    取父窗口的窗口句柄: hwndParent = GetParent (hwnd) ; 发送消息: SendMessage (hwndParent, message, wParam, lParam) ; ...

  7. C语言实现windows窗口滑动条,四、Windows子窗口控件的滚动条类别—窗口子类别化(Window Subc...

    滚动条控件的窗口消息处理程序是Windows内部的.但是,将GWL_WNDPROC标识符作为参数来呼叫GetWindowLong,您就可以得到这个窗口消息处理程序的地址.另外,您可以呼叫SetWind ...

  8. 中年人学C语言Windows程序设计,20子窗口的创建

    今天, 我们要学习的就是 子窗口控件 的使用. 在其他一些 Windows应用软件上我们经常能够看到一些大致相同的按钮.复选框.组合框.列表框等控件, 这些控件很有可能就是使用 标准子窗口控件 来实现 ...

  9. 服务器lIS绑定网站,DataList 中动态绑定服务器子控件的代码

    DataList 中动态绑定服务器子控件的代码 更新时间:2007年09月10日 21:54:04   作者: 1.首先绑定dbList (一个DataList控件名称) 2.设置绑定子控件需要的关键 ...

最新文章

  1. 【linux基础】CMake如何生成动态链接库文件
  2. ElementUI中对el-table的某一列的时间进行格式化
  3. HTTPS加密越来越流行,为何要加密?
  4. 走近分形与混沌(part16)--三与自组织
  5. 【转】void及void指针的深刻解析
  6. 16 PP配置-生产计划-主数据-定义MRP区域
  7. redis优化查询的两种方式
  8. 初试django模型层
  9. hibernate整合mysql配置文件_springboot整合hibernate配置
  10. Python+OpenCV:基于SVM手写数据OCR(OCR of Hand-written Data using SVM)
  11. 如何在命令行下使用Android NDK交叉编译工具
  12. C++ set 排序 修改元素之后不会改变原来的排序
  13. logging synchronous
  14. 大学本科数学专业课程
  15. 谷歌浏览器屏蔽广告插件下载
  16. 算法入门到进阶(一)——算法复杂度
  17. input中加入搜索图标
  18. flashfxp 命令行
  19. 【Linux】swp文件
  20. MySQL数据库(二)高级

热门文章

  1. 使用NtCreateThreadEx将Dll注入目标进程
  2. 什么是数据科学?数据科学的基本内容
  3. 树莓派连接人体感应模块HC-SR501
  4. stm32——自定义HID设备
  5. 产品经理进阶(一)Web APP UI一致性设计
  6. 力扣解法汇总969-煎饼排序
  7. 提取文字的三种方法你知道吗?
  8. CDR VBA X6中Exportbitmap函数的用法(导出图片)
  9. int,long,long long类型的数值范围
  10. 计算机科学期刊催稿,围观!520 ,最“专业”的表白方式