关于纯C++ 判断按钮Click事件(按钮是否按下)的问题,如下:

我用的是VC++6.0的环境。
写完一个窗体我在里面放了个按钮用createWindow创的,但是不知道怎么样才可以判断按钮是否被点击,请各位高手们帮帮我。不是MFC,是纯的C++
不好意思我不要MFC的。我要纯的C++的。按钮是用 createwindow创的

ibeautiful
浏览 922回答 3
3回答

月关宝盒

按钮在CreateWindow创建,判断是否按下是捕捉WM_COMMAND下面的wParam,按钮ID号,比如:case WM_COMMAND:switch(wParam){case IDC_hBU_View:{FILEVEC vec = GetFies();if( !vec.empty() ){FILEVEC::iterator end = vec.end();for ( FILEVEC::iterator it = vec.begin();it != end;++it ){if( CurSet.end() == std::find( CurSet.begin(),CurSet.end(),*it ) ){CurSet.push_back(*it);//SendMessage( g_hLbFiles,LB_ADDSTRING,0,(LPARAM)it->c_str() );SendMessage( g_hLbFiles,LB_ADDSTRING,0,(LPARAM)DBLib::DBFile::DBGetFileName(it->c_str()).c_str() );int Line = (int)SendMessage( g_hLbFiles,LB_GETCOUNT,0,0 );SendMessage( g_hLbFiles,LB_SETCURSEL,Line-1,0 );SendMessage( g_hLbFiles,LB_SETCURSEL,-1,0 );}}}}break;

摇曳的蔷薇

API调用,找到窗口句柄调用LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);记住一点,按钮是一种特殊化的窗口!

慕尼黑5688855

很明显嘛?按钮的点击会向父窗口发送WM_COMMAND消息,捕捉不就行了.例子:// Button1.cpp : Defines the entry point for the application.//#include "stdafx.h"#include "resource.h"#define MAX_LOADSTRING 100// Global Variables:HINSTANCE hInst; // current instanceTCHAR szTitle[MAX_LOADSTRING]; // The title bar textTCHAR szWindowClass[MAX_LOADSTRING]; // The title bar textHWND hWndb; //按钮句柄,一定不能放在消息处理函数中定义.// Foward declarations of functions included in this code module:ATOM MyRegisterClass(HINSTANCE hInstance);BOOL InitInstance(HINSTANCE, int);LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){// TODO: Place code here.MSG msg;HACCEL hAccelTable;// Initialize global stringsLoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);LoadString(hInstance, IDC_BUTTON1, szWindowClass, MAX_LOADSTRING);MyRegisterClass(hInstance);// Perform application initialization:if (!InitInstance (hInstance, nCmdShow)){return FALSE;}hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_BUTTON1);// Main message loop:while (GetMessage(&msg, NULL, 0, 0)){if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)){TranslateMessage(&msg);DispatchMessage(&msg);}}return msg.wParam;}//// FUNCTION: MyRegisterClass()//// PURPOSE: Registers the window class.//// COMMENTS://// This function and its usage is only necessary if you want this code// to be compatible with Win32 systems prior to the 'RegisterClassEx'// function that was added to Windows 95. It is important to call this function// so that the application will get 'well formed' small icons associated// with it.//ATOM MyRegisterClass(HINSTANCE hInstance){WNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX);wcex.style = CS_HREDRAW | CS_VREDRAW;wcex.lpfnWndProc = (WNDPROC)WndProc;wcex.cbClsExtra = 0;wcex.cbWndExtra = 0;wcex.hInstance = hInstance;wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_BUTTON1);wcex.hCursor = LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);wcex.lpszMenuName = (LPCSTR)IDC_BUTTON1;wcex.lpszClassName = szWindowClass;wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);return RegisterClassEx(&wcex);}//// FUNCTION: InitInstance(HANDLE, int)//// PURPOSE: Saves instance handle and creates main window//// COMMENTS://// In this function, we save the instance handle in a global variable and// create and display the main program window.//BOOL InitInstance(HINSTANCE hInstance, int nCmdShow){HWND hWnd;hInst = hInstance; // Store instance handle in our global variablehWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);if (!hWnd){return FALSE;}ShowWindow(hWnd, nCmdShow);UpdateWindow(hWnd);return TRUE;}//// FUNCTION: WndProc(HWND, unsigned, WORD, LONG)//// PURPOSE: Processes messages for the main window.//// WM_COMMAND - process the application menu// WM_PAINT - Paint the main window// WM_DESTROY - post a quit message and return////LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){int wmId, wmEvent;PAINTSTRUCT ps;HDC hdc;TCHAR szHello[MAX_LOADSTRING];LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);switch (message){case WM_COMMAND:wmId = LOWORD(wParam);wmEvent = HIWORD(wParam);if((HWND)lParam==hWndb&&hWndb!=0) //判断是否点击MessageBox(hWnd,"你按了按钮!","提示",1);switch (wmId){case IDM_ABOUT://创建按钮if(hWndb==0){hWndb=::CreateWindow("BUTTON","BUTTON",WS_CHILD | WS_VISIBLE | BS_FLAT | WS_BORDER,5,5,150,30,hWnd,NULL,NULL,NULL);::ShowWindow(hWndb,SW_SHOW);}break;case IDM_EXIT:DestroyWindow(hWnd);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}break;case WM_PAINT:hdc = BeginPaint(hWnd, &ps);// TODO: Add any drawing code here...RECT rt;GetClientRect(hWnd, &rt);DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);EndPaint(hWnd, &ps);break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}return 0;}// Mesage handler for about box.LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam){switch (message){case WM_INITDIALOG:return TRUE;case WM_COMMAND:if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL){EndDialog(hDlg, LOWORD(wParam));return TRUE;}break;}return FALSE;}
打开App,查看更多内容
随时随地看视频慕课网APP