单击按钮创建一个窗体?

亚细亚 2009-02-09 10:44:27
代码如下:

#include <windows.h>
#include <stdio.h>
LRESULT CALLBACK WndProc( HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
LRESULT CALLBACK WndProc( HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
HDC hDC;
PAINTSTRUCT ps;
char szChar[20];
switch(uMsg)
{
case WM_COMMAND:
switch(wParam)
{
case 1001:
CreateWindow("first", "abc", WS_CHILD|WS_VISIBLE |WS_BORDER,100, 100, 200, 200, hwnd ,NULL,NULL,NULL);
break;
}
break;

case WM_CREATE:
CreateWindow("button","创建",WS_CHILD|WS_VISIBLE |BS_PUSHBUTTON,50,50,100,50,hwnd,NULL,NULL,NULL);
break;
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);

}
return 0;
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
wndcls.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WndProc;
wndcls.lpszClassName="first";
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW;

RegisterClass(&wndcls);
HWND hwnd;
hwnd=CreateWindow("first","您好",WS_OVERLAPPEDWINDOW,0,0,800,600,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}


我想单击"创建"按钮,如何弹出一个类似主窗体的窗体?
...全文
171 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
亚细亚 2009-02-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ltc_mouse 的回复:]
Sorry,正确的应该是LOWORD
[/Quote]
改正后,编译正确,但是单击"创建"按钮,并不能弹出窗体?
我的意思就是想知道:主窗体的创建过称就是设计-注册-创建-显示,那么在主窗体的基础之上新弹出的窗体是否要进行设计-注册-创建-显示这样的次序呢?如何在新弹出的窗体上如何写响应事件的函数(这个函数在什么地方写)?
ltc_mouse 2009-02-10
  • 打赏
  • 举报
回复
Sorry,正确的应该是LOWORD
亚细亚 2009-02-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ltc_mouse 的回复:]
C/C++ code#defineIDC_BTNCREATE 1001caseWM_COMMAND:switch( HIWORD(wParam) )
{caseBN_CLICKED:if( IDC_BTNCREATE==LOWWORD(wParam) )
{
CreateWindow("first","abc", WS_CHILD|WS_VISIBLE|WS_BORDER,100,100,200,200, hwnd ,NULL,NULL,NULL);
}break;
}break;caseWM_CREATE:
{
HWND hBtn=CreateWindow("button","创建",WS_CHILD|WS_VISIBLE|BS_PUSHBUTT…
[/Quote]
编译有问题,提示: undefined reference to `LOWWORD'

亚细亚 2009-02-09
  • 打赏
  • 举报
回复
弹出的窗体在什么地方相应winproc函数?也就是说弹出的窗体中的相应事件在哪里处理?
ltc_mouse 2009-02-09
  • 打赏
  • 举报
回复


#define IDC_BTNCREATE 1001

case WM_COMMAND:
switch( HIWORD(wParam) )
{
case BN_CLICKED:
if( IDC_BTNCREATE == LOWWORD(wParam) )
{
CreateWindow("first", "abc", WS_CHILD|WS_VISIBLE |WS_BORDER,100, 100, 200, 200, hwnd ,NULL,NULL,NULL);
}
break;
}
break;

case WM_CREATE:
{
HWND hBtn = CreateWindow("button","创建",WS_CHILD|WS_VISIBLE |BS_PUSHBUTTON,50,50,100,50,hwnd,NULL,NULL,NULL);
SetWindowLong( hBtn, GWL_ID, (LONG)IDC_BTNCREATE );
}
break;
亚细亚 2009-02-09
  • 打赏
  • 举报
回复
就是按钮相应的代码部分:

switch(wParam)
{
case 1001:
CreateWindow("first", "abc", WS_CHILD|WS_VISIBLE |WS_BORDER,100, 100, 200, 200, hwnd ,NULL,NULL,NULL);
break;
}
亚细亚 2009-02-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 waizqfor 的回复:]
CreateWindow自己创建一个窗口 然后用命令按钮响应它就可以了啊
[/Quote]
在命令中我已经写了,可是出不来?
waizqfor 2009-02-09
  • 打赏
  • 举报
回复
CreateWindow自己创建一个窗口 然后用命令按钮响应它就可以了啊

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧