对话框(1)之对话框的建立与如何添加窗口左上角的小ICON图标

前面的博客有一篇专门写了《如何创建自己的ICON图标》,在讲对话框之前,先讲一下如何修改窗口左上角的小图标,这个跟exe的ICON图标有点不一样,不是直接在CreateWindow的倒数第三个参数=LoadIcon(NULL,MAKEINTRESOURCE(ICONID))就行了,这样只是对exe大图标有用,详细请看我的前面的博客。

其实32X32和16X16的ICON图标的ID是一样的。这两者的创建都是一样的,有什么疑问请看博客:菜单和其他资源(1)如何画自己的ICON图标。

 

这里创建了两个ICON图标,一个16X16的,一个是32X32的

         

 

32X32的这样加载:

wndclass.Icon=LoadIcon(NULL,MAKEINTRESOURCE(ICONID));


16X16的这样加载:

SendMessage(hwnd, WM_SETICON, (WPARAM)TRUE, (LPARAM)LoadIcon(GetModuleHandle(NULL), (LPCTSTR)ICONID));

 

//hWnd为窗口句柄
//TRUE表示用大图标
//GetModuleHandle(NULL)表示获得当前应用程序实例
//IDI_APP为当前程序资源中一个图标的ID
//如果提示找不到IDI_APP,请在该文件前几行添上一句#include "resource.h",这样才会把资源ID载入



看看效果吧:

 

ICON讲到这里,下面看看如何创建自己的对话框

 

模式对话框和无模式对话框:无模式对话框允许我们把输入焦点切换到同一个应用程序的另一个窗口,该对话框也无需关闭,这个比较普遍。可以用API函数CreateDialogParam创建。

模式对话框主要是两类:应用程序模式对话框和系统对话框。应用程序对话框不允许我们在本应用程序中切换输入焦点,但是可以切换到其他应用程序中去,比如点击记事本的文件打开按钮,会弹出选择打开文件的对话框,这个对话框不能切换到记事本中,但是可以切换到其他应用程序中去。这个就是属于应用程序模式对话框。系统对话框则比较恶毒,不允许你切换到任何一个应用程序中,我们一看名字就知道,系统对话框,看似比较紧急,要求我们必须首要解决····模式对话框可以用API函数DialogBoxParam产生。

 

现在讲的是最简单的,只是说明一下,如何创建的问题,后面的博客会有更复杂的对话框。

1新建一个win32项目,然后编写自己的代码;

2新建资源,创建自己的ICON和MENU

3新建资源,创建自己的对话框,在编辑对话框的时候,可也拖拽控件,just like C#(对话框里面拉一个picture,type改成Icon,Image改成ICONID)

对话框也可以添加菜单等等。。。

 

看看具体的代码:

#include<windows.h>
#include"resource.h"

BOOL CALLBACK DialogProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam);//声明一个对话框过程函数
LRESULT CALLBACK WindowProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);

HINSTANCE hInst;
int WINAPI WinMain(
  HINSTANCE hInstance,      // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,          // command line
  int nCmdShow              // show state
)
{
	static TCHAR szAppName[]=TEXT("leimingzi");
	HWND hwnd;
	MSG msg;
	WNDCLASS wndclass;
	//HWND hDlg;
	HMENU hMenu;

	hInst=hInstance;
	wndclass.cbClsExtra=0;
	wndclass.cbWndExtra=DLGWINDOWEXTRA;
	wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
	wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
	wndclass.hIcon=LoadIcon(NULL,MAKEINTRESOURCE(ICONID));//exe大图标
	wndclass.hInstance=hInstance;
	wndclass.lpfnWndProc=WindowProc;
	wndclass.lpszClassName=szAppName;
	wndclass.lpszMenuName=NULL;
	wndclass.style=CS_HREDRAW|CS_VREDRAW;


	if(!RegisterClass(&wndclass))//注册窗口
	{
		MessageBox(NULL,TEXT("the program require the window nt"),TEXT("tips"),MB_ICONERROR);
		return 0;
	}

	hMenu=LoadMenu(hInstance,MAKEINTRESOURCE(MENUID));//加载菜单
	hwnd=CreateWindow(
	  szAppName,  // registered class name
	  TEXT("this is title"), // window name
	  WS_OVERLAPPEDWINDOW,        // window style
	  CW_USEDEFAULT,                // horizontal position of window
	  CW_USEDEFAULT,                // vertical position of window
	  CW_USEDEFAULT,           // window width
	  CW_USEDEFAULT,          // window height
	  NULL,      // handle to parent or owner window
	  hMenu,          // menu handle or child identifier
	  hInstance,  // handle to application instance
	  NULL        // window-creation data
	);

	//hDlg=CreateDialogParam(hInstance,MAKEINTRESOURCE(DIALOGID),hwnd,NULL,NULL);

	ShowWindow(hwnd,nCmdShow);
	UpdateWindow(hwnd);



while(GetMessage(&msg,NULL,0,0))
{
	TranslateMessage(&msg);
	DispatchMessage(&msg);
}

	return msg.wParam;

}

LRESULT CALLBACK WindowProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
)
{
	static HINSTANCE hinstance;
	static HWND hDlg;
	static HICON hIcon;

	switch(uMsg)
	{
	case WM_CREATE:
	hinstance=((LPCREATESTRUCT)lParam)->hInstance;
	SendMessage(hwnd, WM_SETICON, (WPARAM)TRUE, (LPARAM)LoadIcon(GetModuleHandle(NULL), (LPCTSTR)ICONID));//添加窗口小图标

		return 0;

	case WM_COMMAND:
		switch(LOWORD(wParam))//菜单事件处理
		{
		case ID_HELP_HELP:
			
			DialogBox(hinstance,MAKEINTRESOURCE(DIALOGID),hwnd,DialogProc);//弹出一个模态对话框
			MessageBeep(0);//发出系统声音
			break;
		}
		return 0;

	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}

	return DefWindowProc(hwnd,uMsg,wParam,lParam);
}

BOOL CALLBACK DialogProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	switch(uMsg)
	{
	case WM_INITDIALOG://初始化对话框
		return TRUE;

	case WM_COMMAND:
		switch(LOWORD(wParam))
		{
		case IDOK:
			EndDialog(hDlg,0);
			return TRUE;
		}
		break;
	}
	return FALSE;
}




图标的创建:

 

效果图

 

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值