vc++对话框程序是怎样添加菜单的?

vc++对话框程序是怎样添加菜单的?,第1张

第一步,建立基于对话框的工程。

第二步,添加menu资源,添加菜单项。

第三步, 在menu资源界面进入ClassWizard,此仿罩姿时会闷孙d出一个对话框,选中“select an exiting class”,然后在select class对话框中选中主对话备绝框类。然后点OK。

第四步, 打开主对话框的属性,general下有menu选项,选中刚才添加的mune资源的ID.

第五步,为菜单项(在窗口类里)添加响应的函数。

lpszMenuName

Pointer to a null-terminated character string that specifies the resource name of the class menu, as the name appears in the resource file. If you use an integer to identify the menu, use the MAKEINTRESOURCE macro. If this member is NULL, windows belonging to this class have no default menu.

================

也就是说,你需要用派闹MAKEINTRESOURCE宏来转换IDR_TYPER,返友而尘世罩不是直接强制转换(LPSTR)。

这样改:

MAKEINTRESOURCE(IDR_TYPER)

=========================

菜单(标准菜单#32768)

窗口主菜单可用GetMenu获得

然后用EnableMenuItem激笑耐活菜单项

上下文菜单获取比较麻烦

可以给目标窗口装载钩子

截获它的WM_INITMENUPOPUP

工具条(标准工具条ToolbarWindow32)

发送TB_GETBUTTON消息获取工具条按钮信息包含按钮ID等

发送TB_ENABLEBUTTON激活工具条按钮

但是TB_GETBUTTON有一个卜早参数是结构体

需要在目标窗口的进程内开辟空间

可碰弊春参考下面的代码

HANDLE

handle,

buf

HWND

hwnd

=

(HWND)/*

工具条句柄

*/

DWORD

pid

TBBUTTON

btn

GetWindowThreadProcessId(hwnd,

&pid)

handle

=

OpenProcess(PROCESS_ALL_ACCESS,

FALSE,

pid)

buf

=

VirtualAllocEx(handle,

NULL,

1,

MEM_COMMIT,

PAGE_READWRITE)

SendMessage(hwnd,

TB_GETBUTTON,

1,

(LPARAM)buf)

ReadProcessMemory(handle,

buf,

&btn,

sizeof(TBBUTTON),

NULL)

SendMessage(hwnd,

TB_ENABLEBUTTON,

btn.idCommand,

MAKELPARAM(TRUE,

0))

SendMessage(hwnd,

TB_INDETERMINATE,

btn.idCommand,

MAKELPARAM(FALSE,

0))

VirtualFreeEx(handle,

buf,

0,

MEM_RELEASE)

CloseHandle(handle)

状态栏(标准状态栏msctls_statusbar32)

发送SB_GETTEXT消息来获取某部分的文本

同样需要到目标窗口的进程内开辟空间

不过有些状态栏是自绘的

可能没有文本

参考下面的代码

TCHAR

szText[256]

HANDLE

handle,

buf

HWND

hwnd

=

(HWND)/*

状态栏句柄

*/

DWORD

pid

GetWindowThreadProcessId(hwnd,

&pid)

handle

=

OpenProcess(PROCESS_ALL_ACCESS,

FALSE,

pid)

buf

=

VirtualAllocEx(handle,

NULL,

1,

MEM_COMMIT,

PAGE_READWRITE)

SendMessage(hwnd,

SB_GETTEXT,

1/*

需要获取文本的部分

*/,

(LPARAM)buf)

ReadProcessMemory(handle,

buf,

szText,

sizeof(szText),

NULL)

VirtualFreeEx(handle,

buf,

0,

MEM_RELEASE)

CloseHandle(handle)


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12374937.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存