GetDlgItem获取窗口中指定参数ID的子元素的句柄,可以通过返回的句柄对窗口内的子元素进行操作。

WINUSERAPI
HWND
WINAPI
GetDlgItem(__in_opt HWND hDlg, //标识含有控件的对话框__in int nIDDlgItem);  //指定将被检索的控件标识符号

返回值:HWND,返回对话框窗体的子元素的句柄
参数1: HWND hDlg 对话框的句柄
参数2:int nIDDlgItem 指定将被检索的控件标识符

SendMessage和PostMessage,两个函数都是发送消息,SendMessage是等待消息返回,而PostMessage是发送完消息后立即返回

LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam)

hWnd:指定要接收消息的窗口的句柄。
如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。
Msg:指定被发送的消息。
按钮消息如下

/** Button Control Messages*/
#define BM_GETCHECK        0x00F0 //检查是否被选中,如果是被选中,返回值为0或1
#define BM_SETCHECK        0x00F1 //设置是否被选中,wParam为0是不选中,1为选中
#define BM_GETSTATE        0x00F2 //获取状态
#define BM_SETSTATE        0x00F3 //设置状态
#define BM_SETSTYLE        0x00F4 //设置样式
#if(WINVER >= 0x0400)
#define BM_CLICK           0x00F5
#define BM_GETIMAGE        0x00F6
#define BM_SETIMAGE        0x00F7
#endif /* WINVER >= 0x0400 */
#if(WINVER >= 0x0600)
#define BM_SETDONTCLICK    0x00F8
#endif /* WINVER >= 0x0600 */

窗体的消息

#define WM_SETFOCUS                     0x0007
#define WM_KILLFOCUS                    0x0008
#define WM_ENABLE                       0x000A
#define WM_SETREDRAW                    0x000B
#define WM_SETTEXT                      0x000C
#define WM_GETTEXT                      0x000D
#define WM_GETTEXTLENGTH                0x000E
#define WM_PAINT                        0x000F
#define WM_CLOSE                        0x0010
#ifndef _WIN32_WCE
#define WM_QUERYENDSESSION              0x0011
#define WM_QUERYOPEN                    0x0013
#define WM_ENDSESSION                   0x0016
#endif
#define WM_QUIT                         0x0012
#define WM_ERASEBKGND                   0x0014
#define WM_SYSCOLORCHANGE               0x0015
#define WM_SHOWWINDOW                   0x0018
#define WM_WININICHANGE                 0x001A
#if(WINVER >= 0x0400)
#define WM_SETTINGCHANGE                WM_WININICHANGE
#endif /* WINVER >= 0x0400 */#define WM_DEVMODECHANGE                0x001B
#define WM_ACTIVATEAPP                  0x001C
#define WM_FONTCHANGE                   0x001D
#define WM_TIMECHANGE                   0x001E
#define WM_CANCELMODE                   0x001F
#define WM_SETCURSOR                    0x0020
#define WM_MOUSEACTIVATE                0x0021
#define WM_CHILDACTIVATE                0x0022
#define WM_QUEUESYNC                    0x0023#define WM_GETMINMAXINFO                0x0024

wParam:指定附加的消息特定信息。
IParam:指定附加的消息特定信息。
返回值:返回值指定消息处理的结果,依赖于所发送的消息。
备注:需要用HWND_BROADCAST通信的应用程序应当使用函数RegisterWindowMessage来为应用程序间的通信取得一个唯一的消息。
如果指定的窗口是由正在调用的线程创建的,则窗口程序立即作为子程序调用。如果指定的窗口是由不同线程创建的,则系统切换到该线程并调用恰当的窗口程序。线程间的消息只有在线程执行消息检索代码时才被处理。发送线程被阻塞直到接收线程处理完消息为止。

SetWindowText设置控件的内容

BOOL SetWindowText(
HWND hwnd, //控件的句柄
LPCTSTR lpString //缓冲区字符串
);

GetWindowText 获得控件的内容

WINUSERAPI
int
WINAPI
GetWindowTextA(__in HWND hWnd,  //控件句柄__out_ecount(nMaxCount) LPSTR lpString, //字符缓冲区__in int nMaxCount); //字符缓冲区大小
WINUSERAPI
int
WINAPI
GetWindowTextW(__in HWND hWnd,__out_ecount(nMaxCount) LPWSTR lpString,__in int nMaxCount);
#ifdef UNICODE
#define GetWindowText  GetWindowTextW
#else
#define GetWindowText  GetWindowTextA
#endif // !UNICODE

IsWindowVisible 检查控件是否显示

BOOL IsWindowVisible(
HWND hWnd //窗体句柄
);

返回值为真或是假
ShowWindow设置窗体控件显示

BOOL ShowWindow(HWND hWnd,  //句柄
int nCmdShow); //显示参数

返回值:如果窗口之前可见,则返回值为非零。如果窗口之前被隐藏,则返回值为零。
nCmdShow:指定窗口如何显示。如果发送应用程序的程序提供了STARTUPINFO结构,则应用程序第一次调用ShowWindow时该参数被忽略。否则,在第一次调用ShowWindow函数时,该值应为在函数WinMain中nCmdShow参数。在随后的调用中,该参数可以为下列值之一:
SW_FORCEMINIMIZE:在WindowNT5.0中最小化窗口,即使拥有窗口的线程被挂起也会最小化。在从其他线程最小化窗口时才使用这个参数。nCmdShow=11。
SW_HIDE:隐藏窗口并激活其他窗口。nCmdShow=0。
SW_MAXIMIZE:最大化指定的窗口。nCmdShow=3。
SW_MINIMIZE:最小化指定的窗口并且激活在Z序中的下一个顶层窗口。nCmdShow=6。
SW_RESTORE:激活并显示窗口。如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸和位置。在恢复最小化窗口时,应用程序应该指定这个标志。nCmdShow=9。
SW_SHOW:在窗口原来的位置以原来的尺寸激活和显示窗口。nCmdShow=5。
SW_SHOWDEFAULT:依据在STARTUPINFO结构中指定的SW_FLAG标志设定显示状态,STARTUPINFO 结构是由启动应用程序的程序传递给CreateProcess函数的。nCmdShow=10。
SW_SHOWMAXIMIZED:激活窗口并将其最大化。nCmdShow=3。
SW_SHOWMINIMIZED:激活窗口并将其最小化。nCmdShow=2。
SW_SHOWMINNOACTIVE:窗口最小化,激活窗口仍然维持激活状态。nCmdShow=7。
SW_SHOWNA:以窗口原来的状态显示窗口。激活窗口仍然维持激活状态。nCmdShow=8。
SW_SHOWNOACTIVATE:以窗口最近一次的大小和状态显示窗口。激活窗口仍然维持激活状态。nCmdShow=4。
SW_SHOWNORMAL:激活并显示一个窗口。如果窗口被最小化或最大化,系统将其恢复到原来的尺寸和大小。应用程序在第一次显示窗口的时候应该指定此标志。nCmdShow=1。

IsWindowEnable 该函数用于判断指定的窗口是否允许接受键盘或鼠标输入

BOOL IsWindowEnabled(HWND hWnd)

返回值:若窗口允许接受键盘或鼠标输入,则返回非0值,若窗口不允许接受键盘或鼠标输入,则返回值为0。

EnableWindow 该函数允许/禁止指定的窗口或控件接受鼠标和键盘的输入,当输入被禁止时,窗口不响应鼠标和按键的输入,输入允许时,窗口接受所有的输入。

BOOL EnableWindow(HWND hWnd,BOOL bEnable);

参数:
hwnd 键盘鼠标可以输入的窗体控件句柄
bEanble true和false
返回值:
如果窗口此前已禁用,则返回值是非零。 返回值是0,则窗口先前启用或错误。

DefWindowProc windows系统默认消息处理函数,函数调用缺省的窗口过程来为应用程序没有处理的任何窗口消息提供缺省的处理。该函数确保每一个消息得到处理。

DefWindowProcA(__in HWND hWnd,__in UINT Msg,__in WPARAM wParam,__in LPARAM lParam);
WINUSERAPI
#ifndef _MAC
LRESULT
WINAPI
#else
LRESULT
CALLBACK
#endif
DefWindowProcW(__in HWND hWnd,__in UINT Msg,__in WPARAM wParam,__in LPARAM lParam);
#ifdef UNICODE
#define DefWindowProc  DefWindowProcW
#else
#define DefWindowProc  DefWindowProcA
#endif // !UNICODE

以下是我写的代码:

#include <Windows.h>
#include "resource.h"INT_PTR CALLBACK DialogProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{BOOL bRet = true;static HWND hButton1;static HWND hCheck1;static HWND hRadio1;int iCheck = 0;int iRadio = 0;TCHAR pszBuffer[256];switch(LOWORD(uMsg)){case WM_CLOSE:EndDialog(hDlg,0);break;case WM_COMMAND:hButton1 = GetDlgItem(hDlg,IDC_BUTTON1);hCheck1 = GetDlgItem(hDlg,IDC_CHECK1);hRadio1 = GetDlgItem(hDlg,IDC_RADIO1);switch(LOWORD(wParam)){case IDC_BUTTON1:MessageBox(hDlg,TEXT("按钮1被按下!"),TEXT("按钮测试"),MB_OK);break;case IDC_BUTTON2:SendMessage(hCheck1,BM_SETCHECK,1,0);SendMessage(hRadio1,BM_SETCHECK,1,0);//MessageBox(hDlg,TEXT("按钮2被按下!"),TEXT("按钮测试"),MB_OK);break;case IDC_BUTTON3:SendMessage(hCheck1,BM_SETCHECK,0,0);SendMessage(hRadio1,BM_SETCHECK,0,0);//MessageBox(hDlg,TEXT("按钮3被按下!"),TEXT("按钮测试"),MB_OK);break;case IDC_BUTTON4:iCheck = SendMessage(hCheck1,BM_GETCHECK,0,0);iRadio = SendMessage(hRadio1,BM_GETCHECK,0,0);if(iCheck){MessageBox(hDlg,TEXT("CheckBox 选中了!"),TEXT("测试"),MB_OK);}else{MessageBox(hDlg,TEXT("CheckBox 没有被选中!"),TEXT("测试"),MB_OK);}if(iRadio){MessageBox(hDlg,TEXT("Radio 选中了!"),TEXT("测试"),MB_OK);}else{MessageBox(hDlg,TEXT("Radio 没有被选中!"),TEXT("测试"),MB_OK);}break;case IDC_BUTTON5:SendMessage(hDlg,WM_CLOSE,0,0);break;case IDC_BUTTON6:SetWindowText(hDlg,TEXT("单于"));break;case IDC_BUTTON7:GetWindowText(hDlg,pszBuffer,256);MessageBox(hDlg,pszBuffer,TEXT("测试"),MB_OK);break;case IDC_BUTTON8:if(IsWindowVisible(hButton1)){ShowWindow(hButton1,SW_HIDE);}else{ShowWindow(hButton1,SW_SHOW);}break;case IDC_BUTTON9:if(IsWindowEnabled(hButton1)){EnableWindow(hButton1,FALSE);}else{EnableWindow(hButton1,TRUE);}break;default:return DefWindowProc(hDlg,uMsg,wParam,lParam);break;}break;default:bRet = false;break;}return bRet;
}int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{DialogBox(hInstance,MAKEINTRESOURCE(IDD_MAIN),NULL,DialogProc);return 0;
}

GetDlgItem、SendMessage、SetWindowText、GetWindowText、IsWindowVisible、ShowWindow、IsWindowEnabled按钮控件操作相关推荐

  1. 主窗口给按钮控件发送消息 BN_CLICKED和BN_SETFOCUS和BN_KILLFOUCS

    先说明一下,按钮控件的消息有很多种,下面的列表是按钮发送的消息,其中用的比较多是BN_CLICKED和BN_SETFOCUS和BN_KILLFOUCS /** User Button Notifica ...

  2. 《实用VC编程之玩转控件》第3课:Button按钮控件

    本文转载自:VC驿站 https://www.cctry.com/thread-297405-1-1.html 1.按钮控件的基本使用: 新建对话框工程,拖拽按钮控件,添加点击事件响应函数! a.双击 ...

  3. GUI 剖析之 控件篇1)按钮控件

    下面来介绍控件,这些是界面编程的重点: 从最简单也是最普遍使用的按钮控件讲起: 按钮控件(button):  实现1:利用对话框编辑器拖放按钮: Vs或者vc的对话框编辑器可以实现所有你想要的控件,只 ...

  4. 孙鑫对话框二中为什么要对按钮控件新建一个类(小结,5.2给出了结论)

    为类添加消息处理函数与成员变量,因为要对控件添加WM_MOUSEMOVE消息处理函数,而控件变量本身 不能加消息处理函数,只有类才能添加,所以要创建CNewButton类,然后使按钮控件属于这个类,当 ...

  5. MFC按钮控件鼠标按下抬起响应

    最近在用MFC这个几百年前的架构做工程的时候发现,其按钮控件没有自带鼠标按下和抬起的消息响应函数,因此做了一番研究. 实现很简单,要实自己实现"BOOL PreTranslateMessag ...

  6. 【Qt】Qt 开发桌面程序 ( Qt 版本 5.14.2 | 编辑 Qt 桌面按钮控件 | 修改按钮文本 | 为按钮添加点击事件 | 系统调用 | 去掉系统调用命令窗口 )

    文章目录 一.添加按钮控件 二.修改按钮文本 三.为按钮添加点击事件 ( 弹出对话框 ) 四.为按钮添加点击事件 ( 打开记事本 ) 五.为按钮添加点击事件 ( 打开计算器 ) 六.去掉系统调用时弹出 ...

  7. 按钮控件里面的间距问题

    一个简单的按钮,里面可能不仅仅是显示文字,让我们去点击,一个按钮控件,子控件可能会有一个图片, 当然,也可能会包含一个图片和文字,里面还嵌套着内部间距等各种问题.(也要值得注意的的是这里的图片不是通过 ...

  8. 在access窗体中加图片_Access实战:一种不用按钮控件就能控制子窗体联动的方法...

    近来宇哥潜心研究Access的设计,多有心得,在此共享一二.Access窗体若要进行控制,是需要通过按钮控件的,我经过自己探索,发现了一种更加简单的方法,也就是不用控件,通过直接点击窗体已有的表格,就 ...

  9. QT旋转按钮控件的实现

    目录 一.实现需求:鼠标hover时旋转 二.实现方式:计时器做动画 三.代码实现 QT旋转按钮控件的实现 一.实现需求:鼠标hover时旋转 需求是:实现类似于WINDOWS下,某些软件窗口关闭按钮 ...

最新文章

  1. Android常见错误
  2. C#用了多线程界面还是卡死
  3. a卡显存测试软件_官方游戏性能堪比RTX 3080 苏姿丰:RX 6000 Big Navi是史上最强A卡...
  4. 初识 scrapy 框架 - 安装
  5. 用aspnet_compiler发布网站 (转载:My way of my life )
  6. delphi 登录界面 主窗体 切换_.NET CORE(C#) WPF 方便的实现用户控件切换(祝大家新年快乐)
  7. 微软征询“Xbox支付方式”,选项包括比特币支付
  8. 中国大学50强排行:北大清华复旦位列三甲
  9. PS2022新增功能简介
  10. 给pmbus添加mfr_id, mfr_version, mfr_model节点显示
  11. 漏洞扫描器 - cmd命令行执行
  12. 计算机二级(C语言)备考
  13. win7如何添加终端服务器,Win7系统如何添加超级终端?Windows7系统超级终端的添加方法...
  14. java基于ssm的房屋租赁管理系统
  15. 理解 LSTM 网络
  16. c++中“箭头(-)”和“点号(.)”操作符的区别
  17. 计算机在旅游方面的应用,浅谈旅游专业在《计算机应用基础》设计中的思考
  18. MAX6951EEE+T LED显示驱动器MAXIM 共阴极显示驱动器
  19. Cobalt Strike Veil 免杀过杀软(子篇10)
  20. 电子书格式及其反编译思路

热门文章

  1. 【视频处理】视频篡改检测经典算法原理部分
  2. 【JMeter】JMeter如何模拟不同的网络速度
  3. 无法启动计算机上的服务器,服务器不能启动的几种解决方案
  4. python简单绘图代码-python中简单易学的绘图:用turtle画太极图
  5. 汇编语言学习笔记(十二)-浮点指令
  6. .net学习笔记11--数据验证控件--RangeValidator
  7. 模拟调制系统 思考题
  8. 解决:dell安装win10亮度不可调节
  9. 怎样理解阻塞非阻塞与同步异步的区别
  10. 用css做出好看的盒子阴影