sdk创建子窗口的问题
代码如下charszClassName[]="new1";WNDCLASSEXwndclass;wndclass.cbSize=sizeof(wndclass);wndc...
代码如下
char szClassName[] = "new1";
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc = NULL;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = globalHInstance;
wndclass.hCursor = ::LoadCursor(NULL, IDC_ARROW);
wndclass.hIcon = NULL;
wndclass.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH);
wndclass.lpszClassName = szClassName;
wndclass.hIconSm = NULL;
wndclass.lpszMenuName = NULL;
::RegisterClassEx(&wndclass);
HWND hNewWnd = ::CreateWindowEx(
NULL,
szClassName,
"new1",
WS_CHILD | WS_VISIBLE,
0,0,300,300,
::FindWindow(NULL, "CG"),
NULL,
globalHInstance,
NULL
);
单步在执行到createWindowEx的时候就会报错,后面就不再执行了。
我要创建的是窗口“CG”的一个子窗口,我确定findWindow(NULL,"CG")获得的是正确的CG的句柄(变量的地址一样,看过了),里面的globalHInstans是在创建窗口CG的时候那个函数里面的hInstance,在调用这个函数的时候从外面传递进来的。
如果我把::findwindow("","CG")换成NULL就可以执行这个语句,但返回的句柄是NULL,请教达人如何解决。
要作出的效果就是类似于word里面点击新建,创建出一个新的窗口一样,当然窗口的样式可以随便,不一定要和word一样。
先附上20分,如果成功再加30,绝不食言。
比较急用,越快越好,快的话再给10分。
===============补充==================
莱狗的回答貌似跟我原来的程序一样啊。。
我原来是char szClassName[] = "abc",
然后在你用"szClassName"的地方都用szClassName代替了,没什么区别。。
而且我调了几次问题好像都在那个::findwindow()函数上,不知道是这个参数要createWindowEx的其他参数配合,还是要wndclass里面做什么设置。
回lfm13720:
我也试过直接保留句柄,然后传递进来,效果是一样的,而且我在问题里也说了,句柄的地址跟CG的句柄是同样的,所以findwindow函数没有问题。
另外,如果可以用mfc我早就用了,也不至于这么要死要活用api编程了。
不过还是谢谢你的回答。 展开
char szClassName[] = "new1";
WNDCLASSEX wndclass;
wndclass.cbSize = sizeof(wndclass);
wndclass.style = CS_HREDRAW|CS_VREDRAW;
wndclass.lpfnWndProc = NULL;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = globalHInstance;
wndclass.hCursor = ::LoadCursor(NULL, IDC_ARROW);
wndclass.hIcon = NULL;
wndclass.hbrBackground = (HBRUSH)::GetStockObject(WHITE_BRUSH);
wndclass.lpszClassName = szClassName;
wndclass.hIconSm = NULL;
wndclass.lpszMenuName = NULL;
::RegisterClassEx(&wndclass);
HWND hNewWnd = ::CreateWindowEx(
NULL,
szClassName,
"new1",
WS_CHILD | WS_VISIBLE,
0,0,300,300,
::FindWindow(NULL, "CG"),
NULL,
globalHInstance,
NULL
);
单步在执行到createWindowEx的时候就会报错,后面就不再执行了。
我要创建的是窗口“CG”的一个子窗口,我确定findWindow(NULL,"CG")获得的是正确的CG的句柄(变量的地址一样,看过了),里面的globalHInstans是在创建窗口CG的时候那个函数里面的hInstance,在调用这个函数的时候从外面传递进来的。
如果我把::findwindow("","CG")换成NULL就可以执行这个语句,但返回的句柄是NULL,请教达人如何解决。
要作出的效果就是类似于word里面点击新建,创建出一个新的窗口一样,当然窗口的样式可以随便,不一定要和word一样。
先附上20分,如果成功再加30,绝不食言。
比较急用,越快越好,快的话再给10分。
===============补充==================
莱狗的回答貌似跟我原来的程序一样啊。。
我原来是char szClassName[] = "abc",
然后在你用"szClassName"的地方都用szClassName代替了,没什么区别。。
而且我调了几次问题好像都在那个::findwindow()函数上,不知道是这个参数要createWindowEx的其他参数配合,还是要wndclass里面做什么设置。
回lfm13720:
我也试过直接保留句柄,然后传递进来,效果是一样的,而且我在问题里也说了,句柄的地址跟CG的句柄是同样的,所以findwindow函数没有问题。
另外,如果可以用mfc我早就用了,也不至于这么要死要活用api编程了。
不过还是谢谢你的回答。 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询