请问大家:
如何创建一个子窗口?子窗口类该何时定义?何时注册?
我随便写的一个程序,凭感觉写的,我知道肯定是错的:
希望大家帮我改一下 谢谢啦!!#include<windows.h>LRESULT CALLBACK WndProc(
HWND,UINT,WPARAM,LPARAM
); //窗口函数说明;LRESULT CALLBACK WndProc2(
HWND,UINT,WPARAM,LPARAM
); //窗口函数说明;
/*********************************************************/
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpszCmdLine,
int nCmdShow
)
{
HWND hwnd;
MSG Msg;
WNDCLASS wndclass;
WNDCLASS wndclass2;
char lpszClassName[]="窗口"; //窗口类名;
char lpszTitle[]="My Windows"; //窗口标题名; //窗口类的定义;
wndclass.style = 0;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0; //窗口类无扩展;
wndclass.cbWndExtra = 0; //窗口实例无扩展;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground =(HBRUSH ) GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL; //窗口中无菜单;
wndclass.lpszClassName = lpszClassName; //窗口类名; //子窗口类的定义;
wndclass2.style = 0;
wndclass2.lpfnWndProc = WndProc2;
wndclass2.cbClsExtra = 0; //窗口类无扩展;
wndclass2.cbWndExtra = 0; //窗口实例无扩展;
wndclass2.hInstance = hInstance;
wndclass2.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wndclass2.hCursor = LoadCursor(NULL,IDC_ARROW);
wndclass2.hbrBackground =(HBRUSH ) GetStockObject(WHITE_BRUSH);
wndclass2.lpszMenuName = NULL; //窗口中无菜单;
wndclass2.lpszClassName = lpszClassName; //窗口类名; //进行窗口类的注册;
if(!RegisterClass( &wndclass )) //如果注册失败则发出警告的声音;
{
MessageBeep(0);
return FALSE;
} //进行窗口类的注册;
if(!RegisterClass( &wndclass2 )) //如果注册失败则发出警告的声音;
{
MessageBeep(0);
return FALSE;
} //创建窗口;
hwnd=CreateWindow(
lpszClassName,
lpszTitle,
WS_OVERLAPPEDWINDOW, //窗口的风格;
CW_USEDEFAULT,
CW_USEDEFAULT, //窗口左上角的坐标为默认值;
CW_USEDEFAULT,
CW_USEDEFAULT, //窗口的宽度和高度都为默认值;
NULL, //此窗口有父窗口;
NULL, //此窗口无主菜单;
hInstance, //创建此窗口的应用程序的当前句柄;
NULL
);
//显示窗口和刷新窗口;
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
//消息循环;
while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);
DispatchMessage (&Msg); } return Msg.wParam; //消息循环结束即程序终止时将信息返回系统;
}//end of WinMain; //窗口函数;
LRESULT CALLBACK WndProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
HWND hwnd2;
char lpszClassName[]="窗口"; //窗口类名;
char lpszTitle[]="My Windows"; //窗口标题名;
switch(message)
{
case WM_PAINT:
//创建子窗口;
hwnd2=CreateWindow(
lpszClassName,
lpszTitle,
WS_OVERLAPPEDWINDOW, //窗口的风格;
CW_USEDEFAULT,
CW_USEDEFAULT, //窗口左上角的坐标为默认值;
CW_USEDEFAULT,
CW_USEDEFAULT, //窗口的宽度和高度都为默认值;
hwnd, //此窗口无父窗口;
NULL, //此窗口无主菜单;
NULL, //创建此窗口的应用程序的当前句柄;
NULL
); break; case WM_DESTROY:
PostQuitMessage(0);
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
LRESULT CALLBACK WndProc2(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
如何创建一个子窗口?子窗口类该何时定义?何时注册?
我随便写的一个程序,凭感觉写的,我知道肯定是错的:
希望大家帮我改一下 谢谢啦!!#include<windows.h>LRESULT CALLBACK WndProc(
HWND,UINT,WPARAM,LPARAM
); //窗口函数说明;LRESULT CALLBACK WndProc2(
HWND,UINT,WPARAM,LPARAM
); //窗口函数说明;
/*********************************************************/
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpszCmdLine,
int nCmdShow
)
{
HWND hwnd;
MSG Msg;
WNDCLASS wndclass;
WNDCLASS wndclass2;
char lpszClassName[]="窗口"; //窗口类名;
char lpszTitle[]="My Windows"; //窗口标题名; //窗口类的定义;
wndclass.style = 0;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0; //窗口类无扩展;
wndclass.cbWndExtra = 0; //窗口实例无扩展;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground =(HBRUSH ) GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL; //窗口中无菜单;
wndclass.lpszClassName = lpszClassName; //窗口类名; //子窗口类的定义;
wndclass2.style = 0;
wndclass2.lpfnWndProc = WndProc2;
wndclass2.cbClsExtra = 0; //窗口类无扩展;
wndclass2.cbWndExtra = 0; //窗口实例无扩展;
wndclass2.hInstance = hInstance;
wndclass2.hIcon = LoadIcon(NULL,IDI_APPLICATION);
wndclass2.hCursor = LoadCursor(NULL,IDC_ARROW);
wndclass2.hbrBackground =(HBRUSH ) GetStockObject(WHITE_BRUSH);
wndclass2.lpszMenuName = NULL; //窗口中无菜单;
wndclass2.lpszClassName = lpszClassName; //窗口类名; //进行窗口类的注册;
if(!RegisterClass( &wndclass )) //如果注册失败则发出警告的声音;
{
MessageBeep(0);
return FALSE;
} //进行窗口类的注册;
if(!RegisterClass( &wndclass2 )) //如果注册失败则发出警告的声音;
{
MessageBeep(0);
return FALSE;
} //创建窗口;
hwnd=CreateWindow(
lpszClassName,
lpszTitle,
WS_OVERLAPPEDWINDOW, //窗口的风格;
CW_USEDEFAULT,
CW_USEDEFAULT, //窗口左上角的坐标为默认值;
CW_USEDEFAULT,
CW_USEDEFAULT, //窗口的宽度和高度都为默认值;
NULL, //此窗口有父窗口;
NULL, //此窗口无主菜单;
hInstance, //创建此窗口的应用程序的当前句柄;
NULL
);
//显示窗口和刷新窗口;
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
//消息循环;
while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);
DispatchMessage (&Msg); } return Msg.wParam; //消息循环结束即程序终止时将信息返回系统;
}//end of WinMain; //窗口函数;
LRESULT CALLBACK WndProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
HWND hwnd2;
char lpszClassName[]="窗口"; //窗口类名;
char lpszTitle[]="My Windows"; //窗口标题名;
switch(message)
{
case WM_PAINT:
//创建子窗口;
hwnd2=CreateWindow(
lpszClassName,
lpszTitle,
WS_OVERLAPPEDWINDOW, //窗口的风格;
CW_USEDEFAULT,
CW_USEDEFAULT, //窗口左上角的坐标为默认值;
CW_USEDEFAULT,
CW_USEDEFAULT, //窗口的宽度和高度都为默认值;
hwnd, //此窗口无父窗口;
NULL, //此窗口无主菜单;
NULL, //创建此窗口的应用程序的当前句柄;
NULL
); break; case WM_DESTROY:
PostQuitMessage(0);
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
LRESULT CALLBACK WndProc2(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
解决方案 »
- 调试Dll时提示xx.exe cannot be found or does not match.
- 【求助】:如何清空 VC output 中的内容?
- 高分求调用程序的VC6.0函数
- 请教,不打开程序就可知程序数据
- 如何在ActiverX中取得当前活动的View?
- 请教大侠在WIN2000里,利用ADO时(_variant_t)(_bstr_t)string,如果string是个文件路径,怎么AddNew不能将文件名加入表的记录中呢?
- 请问在如何注销指定用户
- 又一个VC.NET中的奇怪问题
- 我是个初学者有个问题想请教高手讲讲语音朗读软件的编程原理
- 这种“动态链接”怎样实现?
- 如何比一个可执行文件变成一个安装包
- #define中的问题
前修改,别用lpszClassName
wndclass2.lpszClassName = lpszClassName2; //窗口类名; case WM_PAINT:最好改为
case WM_CREATE:
选择Win32 Application,再选择A typical "Hello World!" application。
就可以自动生成你想要的代码。
是窗口类定义重名啦~~
我把名字改啦~~把子窗口类名和标题名全部设为全局变量,就没什么问题啦~
不过还有一点就是:在定义窗口时有个参数:HINSTANCE 并且在创建窗口时也有这个参数
HINSTANCE
我该怎么设置呀?HINSTANCE在程序中有什么用吗? 上面两个值要设成相同的值吗?
(把这个问题问完了 我就结帖啦~~ 谢谢大家帮忙啦~~)