[ATL/WTL]_[初级]_[常用的界面对象操作]

1. 获取指定大小字体

HFONT AppUtil::GetFont(int pixel,bool bold,const wchar_t* font_name)
{
	LOGFONT lf;
	memset(&lf, 0, sizeof(LOGFONT)); // zero out structure
	lf.lfHeight = pixel; // request a 8-pixel-height font
	if(bold)
	{
		lf.lfWeight = FW_BOLD;
	}
	lstrcpy(lf.lfFaceName, font_name); // request a face name "Arial"

	HFONT font = ::CreateFontIndirect(&lf);
	return font;
}

2.  使用默认浏览器打开超链接

void AppUtil::OpenUrl(std::string url)
{
	::ShellExecuteA(NULL, "open", url.c_str(),NULL, NULL, SW_SHOWNORMAL);
}

3.  打开文件夹

void AppUtil::OpenFolder(std::wstring output_dir_)
{
	::ShellExecute(NULL, L"explore",output_dir_.c_str(), NULL, NULL, SW_SHOWNORMAL);
}

4.  获取DC的作用Bitmap大小

BITMAP GetDCBitmapSize(HDC hdc)
{
	BITMAP structBitmapHeader;
	memset( &structBitmapHeader, 0, sizeof(BITMAP) );

	HGDIOBJ hBitmap = GetCurrentObject(hdc, OBJ_BITMAP);
	GetObject(hBitmap, sizeof(BITMAP), &structBitmapHeader);
	return structBitmapHeader;
}
时间: 2024-10-12 16:25:21

[ATL/WTL]_[初级]_[常用的界面对象操作]的相关文章

[ATL/WTL]_[初级]_[Win32窗口自定义消息处理过程]

场景 有时候我们需要单独对某个窗口消息进行拦截,比如CEdit响应回车, 这时候就需要拦截窗口处理过程了. 当然MFC的界面可以重载: BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg){ 但是WTL的CEdit并不支持这种方式,WTL如果想在 PreTranslateMessage 里拦截消息,必须继承 CMessageFilter 后还要把这个控件注册到消息循环里才行,也就是必须写子类 或者从父窗口拦截这个CEdit的消息. CMessageLoop*

[WTL/ATL]_[初级]_[如何使用GetOpenFileName多选文件-根据文件名长度计算lpstrFile长度]

场景: 1. 使用GetOpenFileName 时, 需要预先自定义lpstrFile的长度比如,buf[1024], 但是如果选择的文件过多怎么办?总不能创建一个超大的内存空间吧, 如果选择少时又浪费内存. 2. 微软的MSDN的坏处就是不提供实际的例子,而在别的地方提供,难道他们没遇到这类普通的问题? 3. 这里stackoverflow提供了一个微软使用lpfnHook 的例子来解决这个问题,这个例子对于unicode是有问题的,计算长度没有x2. 这个bug困扰了我半天. 找这个解决方

[ATL/WTL]_[初级]_[窗口如何实现WM_MOUSELEAVE和WM_MOUSEHOVER]

场景: 1.  WTL的控件默认不支持进入和移出的 WM_MOUSEHOVER ,WM_MOUSELEAVE 事件, 即使写了映射也没用, 必须要使用函数 _TrackMouseEvent  添加监听. https://msdn.microsoft.com/en-us/library/windows/desktop/ms645615(v=vs.85).aspx 2. 默认的Window窗口如果有子窗口时, 当进入子窗口时, 会对父窗口调用WM_MOUSELEAVE, 因为子窗口默认会拦截消息,

[ATL/WTL]_[初级]_[转发消息让CStatic支持点击消息操作]

场景: 1. CStatic支持不定长的字符串长度,还可以支持图片背景,当然要父控件响应 WM_CTLCOLORSTATIC 消息. 2. 可以响应点击事件的Cstatic可以当作简单按钮来使用,不需要自定义绘制操作. 3. 普通创建的CStatic不能响应点击时间,需要加上 SS_NOTIFY的 style才可以, 注意AA_STATIC_CLICK是自定义事件ID. #ifndef __DH_STATIC #define __DH_STATIC #include "window/common

[ATL/WTL]_[初级]_[拖放文件到窗口]

场景: 1. 软件需要支持从桌面拖动文件到软件里,避免从文件打开窗口选择文件,这样效率快很多,这时就需要窗口支持拖放技术. drag and drop. 2. 软件需要复制文件到远程或设备里,支持拖放的话就很方便. 两种方案: 1. 如果是Windows 窗口程序, 可以使用监听WM_DROPFILES 消息来实现, 这里讲解第一种, 比较方便. http://blog.csdn.net/laogaoav/article/details/9152181 2. 如果不想监听 WM_DROPFILE

[Cocoa]_[初级]_[NSTableView--数据操作和表格操作要注意的问题]

1.首先在MainMenu.lib文件里面创建一个NSTableView,在界面上显示一个表格出来,并对表格进行设置. 2.创建文件TableViewDelegate.h和TableViewDelegate.m(文件内容如下文件所示).并在MainMenu.lib文件中创建一个Object(从窗口右边选中Object,拉到在Window中的对话框中),命名:TableViewDelegate. 3.设置代理:tableView 进行设置,和图片中的Table View进行连接. staticFi

[libcurl]_[初级]_[使用libcurl下载大文件]

场景: 1. 在Windows编程时, 下载http页面(html,xml)可以使用winhttp库,但是并不是很下载文件,因为会失败. 由此引出了WinINet库,无奈这个库的稳定性比较低,使用例子又少, 下载大文件时经常是不完整,可查找的资料很少或者是没有特殊情况的解决办法. 2. 我的原则是如果系统有自带的就用系统的,但是 WinINet 要掌握需要花不少时间. 时间因素考虑到了libcurl. 3. libcurl支持ftp,http等协议的文件读取,还能自动获取文件大小, 最重要的是不

[wxWidgets]_[初级]_[常见更新进度条的方案]

场景: 1. 很多程序需要根据处理业务的进度来更新进度条,进度条的目的是让用户能知道业务处理的进度,有进度条的程序更友好,让用户知道程序在运行,而不是没有响应. 2. 现在更新进度条的见过两种方法,一种是通过事件(信号,队列)的发送让主线程按照发送的顺序来更新进度条,一种是设置一个全局整形变量, 通过运行定时器的方式来更新进度条.第一种不适合在更新频率比较高的地方,比如一秒钟发送了20个事件,这样会造成主线程忙于处理事件界面出现假死状态. 所以最好的办法就是使用第2种通过定时器更新进度条,设置一

[wxWidgets]_[初级]_[配置codeblock+wxWidgets3.0.1开发环境]

配置Codeblock+wxWidgets-3.0.1开发环境 作者: Sai 1. 下载codeblock,进官网,首先提醒下,下载工具一定要进官网,最新,没木马. http://www.codeblocks.org/downloads/binaries 选在SourceForge.net下载吧. codeblocks-13.12mingw-setup-TDM-GCC-481.exe 2. 下载最新wxWidgets版本 3.0.1稳定版. http://www.wxwidgets.org/d