已经用API函数创建了一个Dialog,并添加了菜单资源,现在想要做的是:
点击菜单,弹出一个Dialog(上面还有几个文本框),请问该如何实现?(不用MFC)
就如同:点击“帮助”菜单,就弹出“关于”Dialog,显示版本等信息。
点击菜单,弹出一个Dialog(上面还有几个文本框),请问该如何实现?(不用MFC)
就如同:点击“帮助”菜单,就弹出“关于”Dialog,显示版本等信息。
解决方案 »
- MFC中,动态分割了几个窗口,怎么可以让他随着画图大小的变化而变化?
- www.codeproject.com网站的源代码怎么下?
- 是VC.NET好,还是VC6.0好? 真的请大家帮助
- 怎样设置才能进行组播?
- 如何使程序窗口不断的响应onpaint消息,即使最小化或者被别的窗口覆盖的情况
- 用VC 怎么在一个位图上写上文字?在一幅文字上加LOGO,送分!
- 我该学什么?
- 创建虚拟盘
- 从键盘输入一个整数x,先申请一个行列均为x的双精度实数数组,然后输入x平方个双精度实数存入该数组
- 怎样把数据库中的表的各个字段打成一个包!用Socket发送!
- ado会产生内存碎片?
- 求教关于winexec()函数的使用问题
CreateDialogCreateDialogParamCreateWindowCreateWindowEx
CreateDialogIndirectCreateDialogIndirectParam
switch (message)
{ case WM_COMMAND: wmpara = LOWORD(wParam); switch(wmpara)
{
case IDM_HELP:
这儿是你画Dialog的代码!
......
}
我就是按 trueadou(木头龙) 说的方式做的,但问题就出在这:(在LRESULT CALLBACK WndProc中)
case IDM_HELP:
CreateWindow("About",TEXT("关于:"),
WS_CHILD | WS_VISIBLE ,
50, 50, 200, 150, hwnd, NULL,
( (LPCREATESTRUCT) lParam)->hInstance,NULL);
break;
调试时好像是倒数第二个参数有问题,请问这些参数(特别是hWndParen和hInstance)该怎么设?
hInstance表示你的资源模块的来源,NULL表示来自你的程序,
要不然就是一个内存资源模块句柄,你的是前者
#include "resource.h"LRESULT CALLBACK WndProc (HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam);HINSTANCE hInst;
HMENU hMenu;
HWND hwnd;int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPreInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
...
MSG msg ;
WNDCLASS wndclass ;
hMenu=LoadMenu(hInstance,(LPCSTR)IDR_MENU1);
wndclass.lpfnWndProc = WndProc ;
wndclass.hInstance = hInstance ;
...
wndclass.lpszMenuName= "MenuAppMenu";
wndclass.lpszClassName= szAppName; if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow (szAppName,
TEXT ("homework"),
WS_OVERLAPPEDWINDOW,
200, 200,
400, 300,
NULL,hMenu,
hInstance,NULL) ;
ShowWindow (hwnd, nCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return 0;
}LRESULT CALLBACK WndProc (HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_COMMAND:
switch (LOWORD(wParam))
case IDM_HELP:
{
CreateWindow("About",TEXT("关于:"),
WS_CHILD | WS_VISIBLE ,
50, 30, 170, 125,/*NULL */hwnd, NULL,
hInst/*NULL((LPCREATESTRUCT) lParam)->hInstance*/,NULL);
break;
default:
return (DefWindowProc(hwnd, message, wParam, lParam));
}
break;
...
}
}我的程序就是这样的,中间省略了一点。试了一下,还是显示不出来。
请再帮我看看,最好能运行试一下。
WS_CHILD | WS_VISIBLE ,
50, 30, 170, 125,/*NULL */hwnd, NULL,
hInst/*NULL((LPCREATESTRUCT) lParam)->hInstance*/,NULL); ShowWindow (hwnd, nCmdShow) ;
UpdateWindow (hwnd) ;
... ...
改成CreateWindow("static",TEXT("关于:"),
而且整段代码要放到WM_CREATE消息下面,事实上,((LPCREATESTRUCT) lParam)这里的lParam是WM_CREATE 的!
这样好像不可以在点击“帮助”菜单后弹出一Dialog呀;
To zijida:
hWndaParent就应该是主窗口的句柄吧,光换个名字不行,应该换成谁的句柄呢?
To Mackz(在相互):
其实我最开始就是用DialogBox(对话框已画)想显示已画的Dialog,但没显示出来,参数设不好。能说的具体点吗? 基础实再太差了,谢谢帮助。