Win32 SDK 程 序 中 怎 么 为 Button 添 加 双 击 处 理 函 数

KaKaKaKa 2010-04-01 10:01:57
Win32 SDK:
(非MFC)

窗口上有个Button,ID是IDC_BUTTON1。

我知道Button的单击是响应窗体的WM_COMMAND消息,只要在窗体处理WM_COMMAND中编写处理即可。

但是我找了半天,不知道怎么去处理Button的双击呀。

请求帮助。非MFC,SDK是也。
...全文
437 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
SullenSun 2010-04-01
  • 打赏
  • 举报
回复
。。。。。。。。恭喜
lmxmx 2010-04-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fishion 的回复:]
case WM_COMMAND :
if(LOWORD(wParam)==IDC_BUTTON1)
if(HIWORD(wParam)==BN_DBLCLK)
//add your func
[/Quote]

UP,顶起
Eleven 2010-04-01
  • 打赏
  • 举报
回复
The WM_MOUSEHOVER message is posted to a window when the cursor hovers over the client area of the window for the period of time specified in a prior call to TrackMouseEvent.

A window receives this message through its WindowProc function.

其他的具体参看MSDN吧
Eleven 2010-04-01
  • 打赏
  • 举报
回复
The WM_LBUTTONDOWN message is posted when the user presses the left mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.

A window receives this message through its WindowProc function.
fishion 2010-04-01
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 yangjianpro_hotmail 的回复:]
C/C++ code

//
// Dialog
//

IDD_MAIN DIALOGEX 0, 0, 270, 154
STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "Dlg1"
FONT 9, "MS Shell ……
[/Quote]
判断鼠标是左击还是右击不能在COMMAND中判断
KaKaKaKa 2010-04-01
  • 打赏
  • 举报
回复

//
// Dialog
//

IDD_MAIN DIALOGEX 0, 0, 270, 154
STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "Dlg1"
FONT 9, "MS Shell Dlg", 0, 0, 0x1
BEGIN
DEFPUSHBUTTON "确定",IDC_OK,198,123,50,14,WS_GROUP|BS_NOTIFY
END


终于成功了,原来BS_NOTIFY是加在这里,大汗。。。
谢谢以上各位了!100分大家平分了吧。。

额~ 再问个问题:处理Button的鼠标悬浮以及判断鼠标是左击还是右击都是在COMMAND里处理的么?
KaKaKaKa 2010-04-01
  • 打赏
  • 举报
回复
不糊涂的,就是我上面那个代码。我想当用户双击了IDC_OK按钮时,MessageBox提示下呀。
dong918 2010-04-01
  • 打赏
  • 举报
回复
被弄糊涂了,帮顶!!!
KaKaKaKa 2010-04-01
  • 打赏
  • 举报
回复
这是MainDlg窗口的.c文件代码:


BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
}
return FALSE;
}
BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
return TRUE;
}

void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
switch(id)
{
case IDC_OK:
{
if(codeNotify==BN_DBLCLK)
{
MessageBox(hwnd,TEXT("双击OK按钮"),TEXT("提示"),MB_OK); //没反应啊
}
break;
}
default:
break;
}
}

void Main_OnClose(HWND hwnd)
{
EndDialog(hwnd, 0);
}

KaKaKaKa 2010-04-01
  • 打赏
  • 举报
回复
纯C结合WinAPI的, 无C++或MFC的成分
KaKaKaKa 2010-04-01
  • 打赏
  • 举报
回复
我记得VC6.0里面属性中可以设置Button的风格的。
但我是在VS08里拖进来的Button,属性中没发现有设置风格的地方。
代码设置Button为BS_NOTIFY风格怎么写? 谢谢
fishion 2010-04-01
  • 打赏
  • 举报
回复
如果你想响应WM_LBUTTONDBLCLK消息,而不是响应BN_DBLCLK的话,要子类化BUTTON,重写BUTTON的消息处理函数,可以参考下面的
http://www.vckbase.com/document/viewdoc/?id=1343
这不是鸭头 2010-04-01
  • 打赏
  • 举报
回复
调试,看看能不能触发...
ShinyWang 2010-04-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fishion 的回复:]
case WM_COMMAND :
if(LOWORD(wParam)==IDC_BUTTON1)
if(HIWORD(wParam)==BN_DBLCLK)
//add your func
[/Quote]

少了一点,BUTTON的风格要加上BS_NOTIFY。
KaKaKaKa 2010-04-01
  • 打赏
  • 举报
回复
但是我在WndProc中处理WM_LBUTTONDBLCLK消息,根本没有反应啊~

BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
HANDLE_MSG(hWnd,WM_LBUTTONDBLCLK,Main_OnLBClick);
HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
}
return FALSE;
}

void Main_OnLBClick(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)
{
MessageBox(hwnd,TEXT("双击了!"),TEXT("提示"),MB_OK);
}


我这样写的话,是处理在Dialog上双击的,我想处理这个Dialog上的Button双击。

我这个Button是从VS左侧工具箱中拖进来的,没有手写代码生成这个Button
wltg2001 2010-04-01
  • 打赏
  • 举报
回复
一样的,都是处理WM_COMMAND,不过事件通知码不一样而已,楼上写得很清楚了。
Icedmilk 2010-04-01
  • 打赏
  • 举报
回复
代码给发一份我瞧瞧成不?
faith1024@hotmail.com
fishion 2010-04-01
  • 打赏
  • 举报
回复
case WM_COMMAND :
if(LOWORD(wParam)==IDC_BUTTON1)
if(HIWORD(wParam)==BN_DBLCLK)
//add your func
Kudeet 2010-04-01
  • 打赏
  • 举报
回复
SDK的所有消息都在WndProc函数啊,也就是你CreateWindow的时候所指定的那个消息处理函数,所有的消息都在那里处理。

看看这里的例子:
http://blogs.msdn.com/oldnewthing/archive/2005/04/22/410773.aspx

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧