我在Dialog的窗体上再创建别的窗体用WNDCLASS 类但创建的时候总是出错是什么原因?
代码如下,hDlg是 Dialog的窗体句饼
WNDCLASS wndclass;
RECT rect;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = g_hInstance;
wndclass.hIcon = 0;
wndclass.hCursor = NULL; wndclass.lpfnWndProc = (WNDPROC)movieWndProc;
wndclass.lpszClassName = (LPCTSTR)movieName;
RegisterClass(&wndclass); GetClientRect(hDlg, &rect);
movie = CreateWindow(movieName, _T(""), CW_USEDEFAULT | WS_VISIBLE, 0, cbheight, rect.right, rect.bottom - cbheight, /*fi.frameWidth/20,fi.frameHeight/20,*/ frame, NULL, g_hInstance, NULL);
if (!movie)
{
TCHAR buf[80];
wsprintf(buf, _T("couldnt create movie, lasterr = %d, frameWidth = %d, frameHeight = %d"), GetLastError(), fi.frameWidth, fi.frameHeight);
MessageBox(NULL, buf, _T(""), 0);
}
代码如下,hDlg是 Dialog的窗体句饼
WNDCLASS wndclass;
RECT rect;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = g_hInstance;
wndclass.hIcon = 0;
wndclass.hCursor = NULL; wndclass.lpfnWndProc = (WNDPROC)movieWndProc;
wndclass.lpszClassName = (LPCTSTR)movieName;
RegisterClass(&wndclass); GetClientRect(hDlg, &rect);
movie = CreateWindow(movieName, _T(""), CW_USEDEFAULT | WS_VISIBLE, 0, cbheight, rect.right, rect.bottom - cbheight, /*fi.frameWidth/20,fi.frameHeight/20,*/ frame, NULL, g_hInstance, NULL);
if (!movie)
{
TCHAR buf[80];
wsprintf(buf, _T("couldnt create movie, lasterr = %d, frameWidth = %d, frameHeight = %d"), GetLastError(), fi.frameWidth, fi.frameHeight);
MessageBox(NULL, buf, _T(""), 0);
}
解决方案 »
- 状态栏问题:自己定义的状态栏pane,显示文字都是灰色的,咋回事?
- 【SOS】DLL中sendmessage问题!!!
- 你能记得写if常量放前面,为什么记不得写双等号?为什么不用编译器的警告功能?
- ioctlsocket设置成非阻塞后为什么还要等30秒!!!
- 带子窗口的ActiveX控件问题,如何获取回车键?
- 在服务程序中用GetUserName不能得到当前登录用户名字?
- 如何改变弹出菜单上的鼠标指针形状?在线等,解决了马上给分。
- 使用 CDib 时,如果图片文件比较大,一般4M 左右,有什么办法可以提高文件的读写速度?
- 怎样使两个自己的toolbar Dock在MainFrame上的一行中,怎么默认的总是按列左对齐排的。
- 到底怎样来学习VC?(望高手给点建议)
- MFC List Box多行显示
- 怎样在子窗体中访问父窗体中的控件
rect.right
rect.bottom - cbheight
看看这几个值是不是过大或出负值了
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
//1.注册窗口类
static TCHAR szAppName[] = TEXT ("HelloWin") ; //窗口类名称
//定制"窗口类"结构
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
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 = szAppName; //类名称
//注册
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("RegisterClass Fail!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
//建立窗口
HWND hwnd ;
hwnd = CreateWindow (szAppName, //窗口类名称
TEXT ("The Hello Program"), //窗口标题
WS_OVERLAPPEDWINDOW, //窗口风格
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance, //实例句柄
NULL);
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
//消息循环
MSG msg ;
while (GetMessage (&msg, NULL, 0, 0)) //从消息队列中取消息
{
TranslateMessage (&msg) ; //转换消息
DispatchMessage (&msg) ; //派发消息
}
return msg.wParam ;
}
不要忘了UpdateWindow (hwnd) ;
在对话框上创建为何不直接domodal或createwindow