CDC::GetDeviceCaps()物理长度与屏幕像素间的转换
admin | 取词 | 2014-03-21
作用:
读取DC的一些打印区域信息,主要是像素和英寸方面的数据.
声明:
GetDeviceCaps(int )
使用例子:
//所有像素数
int pagecx=dc.GetDeviceCaps(HORZRES);
int pagecy=dc.GetDeviceCaps(VERTRES);
//即每英寸点数
short cxInch = dc.GetDeviceCaps(LOGPIXELSX);
short cyInch = dc.GetDeviceCaps(LOGPIXELSY);
// 计算一个设备单位等于多少0.1mm
doubl... [阅读全文]
DPI 补充
admin | 取词 | 2014-03-19
C++
int main()
{
while (false)
{
//SetProcessDPIAware();
static int i = 0;
i++;
std::cout << i <<" "<< "-------------------------" << std::endl;
POINT pt;
if(GetCursorPos(&pt))
{
std::cout << pt.x << ", " << pt.y << std::... [阅读全文]
通过进程ID获得该进程主窗口的句柄
admin | Windows api | 2014-03-18
一个进程可以拥有很多主窗口,也可以不拥有主窗口,所以这样的函数是不存在的,所幸的是,相反的函数是有的。所以我们可以调用EnumWindows来判断所有的窗口是否属于这个进程。
typedef struct tagWNDINFO
…{
DWORD dwProcessId;
HWND hWnd;
} WNDINFO, *LPWNDINFO;
BOOL CALLBACK YourEnumProc(HWND hWnd,LPARAM lParam)
…{
DWORD dwProce... [阅读全文]
Windows 8.1 DPI 改进
admin | 取词 | 2014-03-17
8.1 修改了一下几点:
增加了 Per-Monitor DPI Virtualization,允许不同显示器拥有不同的比例;引入 WM_DPICHANGED 消息通知软件「DPI 变化」。
可以根据显示器的信息自动识别出各显示器的密度,不用手工调了。
改进了跨窗口操作时座标变换,现在 LogicalToPhysicalPoint 以及 PhysicalToLogicalPoint 没必要添加了(这俩 API 也失效了,换成了 Logic... [阅读全文]
删除占用文件
admin | win32 | 2014-03-15
C++
BOOL DeleteLockedFile(DWORD dwProcessID, HANDLE hFile)
{
TCHAR szTargetName[MAX_PATH] = { 0 };
HANDLE hTargeFile = INVALID_HANDLE_VALUE;
HANDLE hProcess = NULL;
BOOL bResult = FALSE;
do
{
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessID);
... [阅读全文]
AfxOleInit()和::CoInitialize(NULL)区别
admin | Windows api | 2014-03-15
OLE是建立在COM之上的技术,层次比COM要高。AfxOleInit()调用的是OleInitialize(),而OleInitialize()除了调用CoInitializeEx()来初始化COM库外,还进行一些其它的操作,这些操作对OLE应用来说是必须的,这些OLE应用包括:
(1)Clipboard;
(2)Drag and drop;
(3)Object linking and embedding(现在的OLE,已不再仅仅是Object linking a... [阅读全文]
兼谈如何写 DPI-Aware 的 windows 程序
admin | 取词 | 2014-03-13
我在知乎上这篇关于 AlwaysMouseWheel 的文章说过,AWM 不支持高 dpi,使用有 bug。为什么我会发现呢?因为我有一个笔记本换上了 1080p 的屏幕,然后把 dpi 改成了 1.25x。Windows 从 vista 开始引入了 DPI 虚拟化技术,让 dwm 有权力直接放大窗口,而为了确保兼容性,许多 API——包括 GetCursorPos 和WindowFromPoint——都做了一些处理。
具体表现就是,... [阅读全文]
关于Windows高DPI的一些简单总结
admin | 取词 | 2014-03-11
我们知道,关于高DPI的支持, Windows XP时代就开始有了, 那时关于高DPI的支持比较简单, 但是从Vista/Win7 到现在Win8 /Win8.1, Windows关于高DPI的支持已经发生了很大的变化, 下面我们依次简单介绍下。
如果说以前XP时代我们还有理由不关注高DPI, 那么在移动设备时代和大显示器的高分辨率时代, 我们就没有理由不关注高DPI了, 比如Surface Pro... [阅读全文]
解决使用CHtmlView后出现的COleException异常
admin | win32 | 2014-03-05
程序中在使用CHtmlView类来实现浏览器功能时,在调整窗口大小时会窗口输出异常警告,例如我的出现的警告如下: Warning: constructing COleException, scode = DISP_E_MEMBERNOTFOUND ($80020003). htmltest.exe 中的 0x7c80bef7 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0012de68 处的 COleException。 Warning: constructing COleException, sco... [阅读全文]
vista下开机启动 简单绕过UAC的方法 .转载
admin | Windows api | 2014-03-04
背景
vista下,如果不开启UAC,那就没有我下面要说的问题了,呵呵。下面说的都是在vista开启UAC的前提下说的,win7也适用。
在vista下,系统开启了UAC,如果你的软件通过manifest进行了提权(提升到管理员权限),那么exe上面会打上一个“小盾”的图标,这种程序启动的时候,会激活UAC保护机制,弹一个全局对话框出来询问用户是否允许启动,这就是微软标... [阅读全文]