windows sdk 控件的创建处理

控件

我们可以把控件当成特殊的一类窗口,所以,创建控件与创建窗口一样,使用CreateWindow或CreateWindowEx函数创建控件

第二种方式是直接在资源视图中拖拽控件就可以了,这些都是windows利用资源脚本帮我们已经写好了这些代码,所以我们现在添加控件很方便,只需要处理好各种控件消息程序就好了

 

发送消息

  • SendMessage -- 不进消息队列,直接进入窗口过程函数,直到消息处理完才返回
  • PostMessage -- 将消息投递到消息队列,直接返回,不会等待消息处理

控件消息

  • BN_XXX -- 控件向父窗口发送的消息
  • BM__XXX -- 用于控制控件的消息
  • BN_CLICKED -- 当按钮被按下的时候发送此消息
  • BM_CLICK -- 模拟点击按钮
  • 当控件自身状态改变的时候,会向父窗口发送WM_COMMAND消息,通过向控件发送消息来控制控件的状态属性

 

// TestControls.cpp : 定义应用程序的入口点。
//

#include "stdafx.h"
#include "Win32Test.h"
#include "resource.h"


// “关于”框的消息处理程序。
INT_PTR CALLBACK TestDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
  switch (message)
  {
  case WM_INITDIALOG:
    return (INT_PTR)TRUE;

  case WM_COMMAND:
  {
                   WORD wNotiCode = HIWORD(wParam);
                   WORD wId = LOWORD(wParam);

                   HWND hControl = (HWND)lParam;

                   switch (wNotiCode)
                   {
                   case BN_CLICKED:
                   {
                                    switch (wId)
                                    {
                                    case IDC_BUTTON1:
                                      MessageBox(hDlg, TEXT("测试按钮被按下"), NULL, MB_OK);
                                      break;

                                    case IDC_BUTTON2:
                                    {
//获取按钮ID
                                                     HWND hBtnTest = GetDlgItem(hDlg, IDC_BUTTON1);
//发送BM消息模拟按钮1点击消息
                                                     SendMessage(hBtnTest, BM_CLICK, NULL, NULL);
                                    }
                                      break;


                                      //获取文本框的内容
                                    case IDC_BUTTON3:
                                    {
                                                      //获取文本框的窗口句柄
                                                      HWND hEdtTest = GetDlgItem(hDlg, IDC_EDIT1);

                                                      //发送EM_GETLINE,获取内容
                                                      TCHAR szBuff[MAXBYTE] = { MAXBYTE, 0 };
                                                      SendMessage(hEdtTest, EM_GETLINE, 0, (LPARAM)szBuff);

                                                      //发送WM_TEXT获取文本
                                                      //SendMessage(hEdtTest, WM_GETTEXT, MAXBYTE, (LPARAM)szBuff);

                                                      //获取对话框标题
                                                      //SendMessage(hDlg, WM_GETTEXT, MAXBYTE, (LPARAM)szBuff);

                                                      //获取文本
                                                      //GetWindowText(hEdtTest, szBuff, MAXBYTE);

                                                      //获取文本框内容
                                                      //GetDlgItemText(hDlg, EDT_TEST, szBuff, MAXBYTE);
                                                      //GetDlgItemInt;

                                                      //
                                                      //SendDlgItemMessage

                                                      MessageBox(hDlg, szBuff, NULL, MB_OK);
                                    }
                                      break;

                                    case IDC_BUTTON4:
                                      SetDlgItemText(hDlg, IDC_EDIT1, TEXT("hello"));
                                      break;

                                    default:
                                      break;
                                    }

                   }
                     break;
                   default:
                     break;
                   }

  }
    break;

  case WM_CLOSE:
    EndDialog(hDlg, 0);
    break;
  }
  return (INT_PTR)FALSE;
}

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
  _In_opt_ HINSTANCE hPrevInstance,
  _In_ LPWSTR    lpCmdLine,
  _In_ int       nCmdShow)
{
  DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, TestDlgProc);
  return 0;
}



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值