几个常见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函数大全
操作系统除了协调应用程序的执行.内存分配.系统资源管理外,同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务是一个函数),可以帮肋应用程序达到开启视窗.描绘图形.使用周边设备的目的,由 ...
随机推荐
- CodeForceS#276-B(求最大值)
B. Valuable Resources Many computer strategy games require building cities, recruiting army, conqu ...
- HDU 2861 (DP+打表)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2861 题目大意:n个位置,m个人,分成k段,统计分法.S(n)=∑nk=0CknFibonacci(k ...
- 关于c语言模拟c++的多态
关于c++多态,个人认为就是父类调用子类的方法,c++多态的实现主要通过虚函数实现,如果类中含有虚函数,就会出现虚函数表,具体c++多态可以参考<深度探索c++对象模型> c语言模拟多态主 ...
- ios retain 与 copy 的区别
.retain 与copy区别 retain 的仅仅是引用计数加1,但是并没有创建新的对象.它们的指针是指向相同的内存地址. copy 是创建一个新的对象作为原来对象的副本,新创建出来的引用计数并没有 ...
- ACM: Just a Hook 解题报告 -线段树
E - Just a Hook Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u D ...
- NOIp 2013 #3 转圈游戏 Label:模拟
题目描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置,……,依此 ...
- BZOJ 1045 题解
1045: [HAOI2008] 糖果传递 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3502 Solved: 1623[Submit][Sta ...
- POJ 2955 Brackets(区间DP)
题目链接 #include <iostream> #include <cstdio> #include <cstring> #include <vector& ...
- fuser 命令的介绍
fuser 可以显示出当前哪个程序在使用磁盘上的某个文件.挂载点.甚至网络端口,并给出程序进程的详细信息. fuser显示使用指定文件或者文件系统的进程ID.默认情况下每个文件名后面跟一个字母表示访 ...
- win7/IE8无法加载QCbin的插件
pian A: 1.控制面板->系统和安全->更改用户账户控制设置->安全等级调至最低->关机重启 2.打开IE浏览器->工具->Internet选项->高级 ...