几个常见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函数大全
操作系统除了协调应用程序的执行.内存分配.系统资源管理外,同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务是一个函数),可以帮肋应用程序达到开启视窗.描绘图形.使用周边设备的目的,由 ...
随机推荐
- DataTable过滤重复字段
有时我们需要从DataTable中抽取Distinct数据,以前总是以对DataTable进行foreach之类纯手工方式获取. 近来发现DataView可以帮我们直接获取Distinct数据,汗一个 ...
- Unity Standard Assets 简介之 2D
这篇介绍2D资源包. 文件夹比较多,但是很多都是prefab的基础资源,所以我们只介绍 Prefabs 和 Scripts 文件夹. Prefabs文件夹: CharacterRobotBoy: 提供 ...
- android 自定义 view 和 ViewGroup
---恢复内容开始--- ViewGroup的职能为:给childView计算出建议的宽和高和测量模式 :决定childView的位置:为什么只是建议的宽和高,而不是直接确定呢,别忘了childVie ...
- objective-c 多线程注意的问题
1.资源竞争:当每个线程都去访问同一段内存时,会导致所谓i资源竞争问题,这时候可以通过“@synchronized block”将实例变量包围起来,创建一个互斥锁, 这样你就可以确保在互斥锁中的代码一 ...
- CF 16C. Monitor
题目链接 水题依旧无法1Y. #include <cstdio> #include <iostream> #include <cmath> using namesp ...
- 【BZOJ1012】 【JSOI2008】最大数maxnumber
Description 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度. 2. ...
- hdu1232 并查集
1. hdu1232 2.链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 3.总结:简单并查集 #include<iostream> # ...
- 在DataGridView控件中加入ComboBox下拉列表框的实现
在DataGridView控件中加入ComboBox下拉列表框的实现 转自:http://www.cnblogs.com/luqingfei/archive/2007/03/28/691372.htm ...
- linux下创建,删除,移动文件命令
创建文件:touch + filename 删除文件:rm + filename 复制文件:cp + filename + dirname 移动文件:mv + filename + dirname 注 ...
- php读取html文件(或php文件)的方法
一.使用fopen()函数 此函数主要传入的是头两个参数(第一个是文件地址,第二个是打开方式),可以读取任何一个文本文件,然后用while将fopen函数读取到的每一行数据循环输出. 如: ...