几个常见Win32 API函数
1.获取客户区矩形区域
RECT cliRect;
GetClientRect(hWnd, &cliRect);
2.获取窗口上下文句柄
HDC hdc = GetDC(hWnd);
//....
ReleaseDC(hWnd, hdc);
3.LPWSTR 与 char * 互转
int32_t WToChar(LPWSTR szWstr, char szCstr[], const int32_t chrLen)
{
int iLength = WideCharToMultiByte(CP_ACP, , szWstr, -, NULL, , NULL, NULL);
return WideCharToMultiByte(CP_ACP, , szWstr, -, szCstr, iLength, NULL, NULL);
} int32_t CharToW(const char* szCstr, WCHAR szWstr[], const int32_t wstrLen)
{
int iLength = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szCstr, -, NULL, );
return MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szCstr, -, szWstr, iLength);
}
4.获取带颜色的画刷
COLORREF colorObs = 0x9D9D9D;
HBRUSH hbObs = CreateSolidBrush(colorObs);
//....
DeleteObject(hbObs);
5.绘制矩形
Rectangle(hdc ,left,top,right,bottom);
6.填充矩形
FillRect(hdc, &rect, hbObs);
7.刷新整个窗口
InvalidateRect(hWnd, NULL, TRUE);
8.设置窗口标题
SetWindowText(hWnd, szText);
9.打开文件对话框
bool OpenFileDialog(HWND hWnd, char szFileName[MAX_PATH])
{
WCHAR szFile[MAX_PATH] = { };
OPENFILENAME ofn = { OPENFILENAME_SIZE_VERSION_400 };
ofn.hwndOwner = hWnd;
// 过滤器,以\0相隔: 显示名称\0过滤器\0显示名称\0过滤器\0\0
ofn.lpstrFilter = TEXT("txt(*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0");
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrTitle = TEXT("选择文件");
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST;
TCHAR szCurDir[MAX_PATH];
GetCurrentDirectory(sizeof(szCurDir), szCurDir);
ofn.lpstrInitialDir = szCurDir;//设置对话框显示的初始目录
BOOL bOk = GetOpenFileName(&ofn);
if (!bOk)
{
return false;
}
//MessageBox(NULL, ofn.lpstrFile, TEXT("Tips_Yes"), MB_OK);
memset(szFileName, , sizeof(szFileName));
WToChar(ofn.lpstrFile, szFileName, sizeof(szFileName));
return true;
}
10.保存文件对话框
bool SaveFileDialog(HWND hWnd, char szFileName[MAX_PATH])
{
WCHAR szFile[MAX_PATH] = { };
OPENFILENAME ofn = { OPENFILENAME_SIZE_VERSION_400 };
ofn.hwndOwner = hWnd;
// 过滤器,以\0相隔: 显示名称\0过滤器\0显示名称\0过滤器\0\0
ofn.lpstrFilter = TEXT("txt(*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0");
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrTitle = TEXT("选择文件");
ofn.Flags = OFN_OVERWRITEPROMPT; // 覆盖提示
TCHAR szCurDir[MAX_PATH];
GetCurrentDirectory(sizeof(szCurDir), szCurDir);
ofn.lpstrInitialDir = szCurDir;//设置对话框显示的初始目录
BOOL bOk = GetSaveFileName(&ofn);
if (!bOk)
{
return false;
}
//MessageBox(NULL, ofn.lpstrFile, TEXT("Tips_Yes"), MB_OK);
memset(szFileName, , sizeof(szFileName));
WToChar(ofn.lpstrFile, szFileName, sizeof(szFileName));
return true;
}
11.获取或设置控件文字
GetDlgItemText(hDlg, IDC_EDIT_ROW, szTRow, );
SetDlgItemText(hDlg, IDC_EDIT_COL, szTCol);
12.获取光标位置
POINT pt;
GetCursorPos(&pt);
13.屏幕坐标与窗口坐标之间的转化
ScreenToClient(hWnd, &pt);
ClientToScreen(hWnd, &pt);
14.设置窗口位置和大小
SetWindowPos(hWnd, NULL, nX, nY, nWidth, nHeight, false);
15. 打开右键菜单
void UIManager::OnContextMenu(const HWND &hWnd, const RECT &cliRect, const POINT &clickPt)
{
POINT tmpt = clickPt;
ScreenToClient(hWnd, &tmpt);
if (PtInRect(&cliRect, tmpt) == FALSE){ return; }
HMENU hroot = LoadMenu((HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), MAKEINTRESOURCE(IDR_CONTEXT));
if (!hroot){ return; }
HMENU hpop = GetSubMenu(hroot, 0);
if (!hpop){ return; }
ClientToScreen(hWnd, &tmpt);
//显示快捷菜单
TrackPopupMenu(hpop,
TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RIGHTBUTTON,
tmpt.x,
tmpt.y,
,
hWnd,
NULL);
// 用完后要销毁菜单资源
DestroyMenu(hroot);
}
几个常见Win32 API函数的更多相关文章
- Detours简介 (拦截x86机器上的任意的win32 API函数)
Detours 当然是用detours,微软明显高腾讯一筹,同上,至今没失败过.写这种HOOK一定要再写个测试程序,不要直接HOOK你的目的程序,例如QQ,因为这样不方面更灵活的测试.说明一下:Det ...
- win32 API函数
cozy的博文 win32 API函数大全 (2008-03-15 16:28) 分类: 个人日记 1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WN ...
- C#中导入Win32 API函数
C#中导入Win32 API的方法: 1.引用命名空间 using System.Net.Security; using System.Runtime.InteropServices; 2. [Dll ...
- 调用win32 api 函数SendMessage() 实现消息直接调用
简单的调用例子, 适合初学者学习,当然 我也是初学者. #include <windows.h> #include <stdio.h> #include <stdlib. ...
- C# 通过调用Win32 API函数清除浏览器缓存和cookie
public enum ShowCommands : int { SW_HIDE = , SW_SHOWNOrmAL = , SW_NOrmAL = , SW_SHOWMINIMIZED = , SW ...
- Win32 API编程——前言
一丶什么是Win32 API? 微软为了保护操作系统的安全性和稳定性,把系统分为内核层和用户层(内核层的代码只能在当CPU的特权级为R0状态下执行,用户层的代码在CPU特权级为R0和R3都能执行),w ...
- C#调用Win32 api学习总结
从.NET平台调用Win32 API Win32 API可以直接控制Microsoft Windows的核心,因为API(Application Programming Interface)本来就是微 ...
- 【.Net】从.NET平台调用Win32 API
小序 Win32 API可以直接控制Microsoft Windows的核心,因为API(Application Programming Interface)本来就是微软留给我们直接控制 ...
- WINDOWS-API:API函数大全
操作系统除了协调应用程序的执行.内存分配.系统资源管理外,同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务是一个函数),可以帮肋应用程序达到开启视窗.描绘图形.使用周边设备的目的,由 ...
随机推荐
- 代码审查工具StyleCop
“代码审查”或是“代码评审”(Code Review),这是一个流程,当开发人员写好代码后,需要让别人来review一下他的代码,这是一种有效发现BUG的方法.由此,我们可以审查代码的风格.逻辑.思路 ...
- ccc 函数中写函数
attackOnTarget: function (atkDir, targetPos) { var self = this; let deg = cc.radiansToDegrees(cc.pAn ...
- Hive0.11安装配置学习笔记
转:http://springsfeng.iteye.com/blog/1734517 1 . 首先请安装好MySQL并修改root账户密码,使用root账户执行下面命令: su - root ...
- [转]maven安装以及eclipse配置maven
转自:http://jingyan.baidu.com/article/295430f136e8e00c7e0050b9.html 方法/步骤 下载maven的bin,在apache官方网站可以下载. ...
- ACM Haffman编码
Haffman编码 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 哈弗曼编码大家一定很熟悉吧(不熟悉也没关系,自己查去...).现在给你一串字符以及它们所对应的权值 ...
- ios retain 与 copy 的区别
.retain 与copy区别 retain 的仅仅是引用计数加1,但是并没有创建新的对象.它们的指针是指向相同的内存地址. copy 是创建一个新的对象作为原来对象的副本,新创建出来的引用计数并没有 ...
- Ubuntu Gnome 14.04.2 lts 折腾笔记
unity感觉不爽,于是来折腾gnome3 = = 首先去官网下载ubuntu gnome 14.04.2 lts的包(种子:http://cdimage.ubuntu.com/ubuntu-gnom ...
- phpMyAdmin:无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装。
一:错误提示 英文:Cannot start session without errors, please check errors given in your PHP and/or webserve ...
- 启动tomcat,报java.lang.NoClassDefFoundError
用的Build Path加进来的jar包,没有读取到,应该讲jar包放在lib目录下
- js添加确认删除操作注意事项
function delsure(){ if(confirm('确认删除吗?')){ return true;//点击确定则返回这里的内容 }else{ return false; } } 在表单中添 ...