简易的WIN32对话框程序框架

这几天开始阅读《window核心编程》,读完第一章,作者实现一个查询Windows错误码的查询。程序思路很简单,网上下载源代码看看~~~~!!

打开上个世纪写的代码,FUCK!简直是天书!!虽然,我没有把《Windows程序设计》这本书看完,但是,我自以为看看这种win32小程序的代码,百度一下函数功能,还是看得懂的!!现实还是很残酷呀!!

先说一说作者的源代码,作者为书中所有的小程序引用了“CmnHdr.h”和“WindowX.h”,前者是作者自己定义的头文件,主要是关于编译器和连接器的配置,后者是Windows自带的一个头文件,包含大量宏定义,主要的作用是简化代码(包括消息处理宏,子控件宏,API宏)。由于这些宏太tm长了,所以接下来我的代码没有使用这些宏,而是一个正常的思路实现这个小工具!同时,我会总结一下程序中用到的各种函数,已备以后查阅!

PS:为了实现这个程序,我看了《程序设计》第九章,到第11章,整整100多页!!好吧,我是菜鸡!


这是这是程序的界面:


 

整个程序基于对话框实现,包括两个静态控件,一个编辑控件,一个按钮和一个复选按钮;

主要的功能肯定就是获取错误码的描述;

其他小的设定还有:程序只能运行一个实例以及让程序置顶


关于程序只能运行一个实例:网上有很多方法,我们利用最简单的:利用函数FindWindow根据程序名查找窗体,如果成功说名已经有程序实例运行了,我们发送一个消息,让对话框过程把焦点设定到这个正在运行的例程!

int WINAPI WinMain(HINSTANCE hIns,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
	//保证应用程序只有一个活动的例程
	HWND hwnd=FindWindow(NULL,TEXT("ERR Show"));
	if(IsWindow(hwnd))
	{
		SendMessage(hwnd,ESM_POKECODEANDLOOKUP,NULL,0);
	}else
	{
		DialogBoxParam(hIns,MAKEINTRESOURCE(IDD_ERR),NULL,DlgProc,NULL);
	}
	
	return(0);
}
ESM_POKECODEANDLOOKUP

是自定义的一个消息,他接受到这个消息的对话框把自己设定为焦点
case ESM_POKECODEANDLOOKUP:
		SetForegroundWindow(hDlg);//将对话框设定到前台并且使他获得焦点
		break;

关于函数
DialogBoxParam(hIns,MAKEINTRESOURCE(IDD_ERR),NULL,DlgProc,NULL);
他创建的是一个非模态的对话框,这里对话框资源号是IDD_ERR,这个对话框没有父窗口,对话框过程为DlgProc。

对话框过程和窗口过程有很大不同,具体来说有三点:

1.窗口过程返回值是LRESULT,一般在程序中我们返回0或者返回消息给程序处理(return DefWindowProc(.....));对话框返回TRUE和FALSE(表示这个消息对话框是否处理了);

2.对话框没有过WM_PAINT和WM_DESTORY以及WM_CREATE消息;

3.对话框用WM_INITDIALOG消息取代WM_CREATE;

由于这个对话框和窗口类不太一样,好像消息循环我们看不到,我们不能通过发送WM_CLOSED结束对话框。我们使用函数

case IDCANCEL:
<span style="white-space:pre">	</span>EndDialog(hDlg,0);//关闭对话框窗口
<span style="white-space:pre">	</span>return TRUE;
对话框上头的小按钮能产生IDCANCEL消息


通过上面这些函数,基本上我们就有一个简单的框架了,剩下的我们只需添加对话框的子控件的消息响应,就能实现其他功能了!


让对话框始终置顶,实现这个功能只需要一个函数,

case IDC_CHECK1:
			SetWindowPos(hDlg, IsDlgButtonChecked(hDlg, IDC_CHECK1) 
				? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
			return TRUE;

我们结束复选按钮的消息利用SetWindowPos函数让对话框的Z位置顶:

HWND_TOP:将窗口置于Z序的顶部。
HWND_TOPMOST:将窗口置于所有非顶层窗口之上。即使窗口未被激活窗口也将保持顶级位置。


程序的主要功能获取错误码的描述,通过函数FormatMessage实现!


	case WM_COMMAND:
		switch(LOWORD(wParam))
		{
		case IDC_BUTTON1:
			dwError=GetDlgItemInt(hDlg,IDC_EDIT1,NULL,FALSE);//把对话框中指定控制的文本转换为一个整形值
			fOk = FormatMessage(	FORMAT_MESSAGE_FROM_SYSTEM|//从系统获取错误码信息
							FORMAT_MESSAGE_IGNORE_INSERTS|//或的%占位符信息
							FORMAT_MESSAGE_ALLOCATE_BUFFER,//为信息分配一块内存
							NULL,dwError,systemLocale,(PTSTR)&hlocal,0,NULL);
			if (!fOk) {
				// Is it a network-related error?
				HMODULE hDll = LoadLibraryEx(TEXT("netmsg.dll"), NULL, 
					DONT_RESOLVE_DLL_REFERENCES);

				if (hDll != NULL) {
					fOk = FormatMessage(
						FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_IGNORE_INSERTS |
						FORMAT_MESSAGE_ALLOCATE_BUFFER,
						hDll, dwError, systemLocale,
						(PTSTR) &hlocal, 0, NULL);
					FreeLibrary(hDll);
				}
			}
			if(hlocal!=NULL)
			{
				SetDlgItemText(hDlg,IDC_ERRD,(PCTSTR)LocalLock(hlocal));
				LocalFree(hlocal);
			}else
			{
				SetDlgItemText(hDlg,IDC_ERRD,TEXT("未发现这个错误码的描述信息"));
			}
			return TRUE;




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装CUDNN是为了在Windows 10系统上使用深度学习框架时提供GPU加速的支持。以下是安装CUDNN的步骤: 1. 首先,确保您已经安装了支持CUDA的显卡驱动程序,并且已经安装了CUDA Toolkit。如果未安装CUDA Toolkit,请先安装它。您可以从NVIDIA的官方网站下载并安装适合您显卡的驱动和CUDA Toolkit。 2. 下载CUDNN软件包。您需要根据您的CUDA版本和操作系统选择合适的CUDNN版本。您可以从NVIDIA的开发者网站下载CUDNN。确保选择与您的CUDA版本兼容的CUDNN版本,通常来说,您需要下载一个包含库文件和头文件的压缩文件。 3. 解压缩下载的CUDNN软件包。您将得到一个包含头文件和库文件的文件夹。 4. 打开解压后的文件夹,您会看到三个文件夹,分别是bin、include和lib。将这三个文件夹中的内容复制到相应的CUDA Toolkit安装目录下的对应文件夹中。例如,将bin中的文件复制到CUDA Toolkit的bin文件夹中,将include中的文件复制到CUDA Toolkit的include文件夹中,将lib中的文件复制到CUDA Toolkit的lib文件夹中。 5. 设置环境变量。在Windows 10系统上,您需要将CUDA Toolkit的bin目录添加到系统的Path环境变量中,以便系统可以找到CUDNN库文件。您可以按照以下步骤进行设置: - 右键点击“此电脑”(或“我的电脑”),选择“属性”。 - 在左侧面板上,点击“高级系统设置”。 - 在“系统属性”对话框中,点击“环境变量”按钮。 - 在“环境变量”对话框中,找到系统变量中的Path变量,并双击打开。 - 在变量值的末尾添加CUDA Toolkit的bin目录的路径,确保每个路径之间用分号分隔。 6. 完成上述步骤后,您可以重新启动您的计算机,以使环境变量的更改生效。 现在,您已经成功安装了CUDNN。您可以在使用深度学习框架时启用GPU加速并享受更快的训练和推理速度。请确保在使用CUDNN时按照相应的文档和教程进行配置和使用。 参考了关于FTP扫描的说明。 参考了关于CUDNN安装的提示。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值