win32开发(创建子窗口)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】


    在win32中,有的时候需要创建额外的子窗口。所谓子窗口的概念,就是窗口本身不会超出母窗口的边界,所有的操作都是在母窗口里面完成的。子窗口可以用os提供的默认类型来完成,也可以自定义类型来完成,即自定义WNDCLASSEX。常用的子窗口有BUTTON、COMBOBOX、EDIT、LISTBOX、STATIC、SCROLLBAR、RichEdit等类型,注意msdn提供的另外一种MDICLIENT类型是专门为mdi程序准备的。


    那么,代码怎么编写呢?很简单,基本上就是一行代码,在WM_CREATE里面添加就可以了,

	case WM_CREATE:
		HWND hsub;
		hsub = CreateWindow( 
			"BUTTON",   // predefined class 
			"OK",       // button text 
			WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,  // styles  
			10,         // starting x position 
			10,         // starting y position 
			100,        // button width 
			100,        // button height 
			hWnd,       // parent window 
			NULL,       // No menu 
			hInst, 
			NULL);      // pointer not needed 

    注意,这里class类型一定要填写成"BUTTON",这也是子窗口之间的最大区别。这里只要创建了,就可以显示了。当然,如果是别的类型的子窗口,那就替换成对应的名字就可以了。比如说,如果是"SCROLLBAR",就可以这么写,

	case WM_CREATE:
		HWND hsub;
		hsub = CreateWindow( 
			"SCROLLBAR",   // predefined class 
			"OK",       // button text 
			WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,  // styles  
			10,         // starting x position 
			10,         // starting y position 
			100,        // button width 
			100,        // button height 
			hWnd,       // parent window 
			NULL,       // No menu 
			hInst, 
			NULL);      // pointer not needed 

    有兴趣的同学可以按照class的name,进行一个一个的尝试。不过,既然子窗口都准备好了,那么消息在什么地方处理呢?其实也不复杂。大部分子窗口的消息和母窗口共享一个WndProc函数,直接在对应的WM_COMMAND或者WM_NOTIFY里面处理就好了。如果不确定,可以在这两个地方设置调试断点,再根据wParam和lParam分别判断就可以了。

	case WM_NOTIFY:
		break;
		
	case WM_COMMAND:
		wmId    = LOWORD(wParam); 
		wmEvent = HIWORD(wParam); 
		// Parse the menu selections:
		switch (wmId)
		{
		case IDM_ABOUT:
			DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
			break;
		case IDM_EXIT:
			DestroyWindow(hWnd);
			break;
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
		}
		break;


  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式-老费

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值