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函数的更多相关文章

  1. Detours简介 (拦截x86机器上的任意的win32 API函数)

    Detours 当然是用detours,微软明显高腾讯一筹,同上,至今没失败过.写这种HOOK一定要再写个测试程序,不要直接HOOK你的目的程序,例如QQ,因为这样不方面更灵活的测试.说明一下:Det ...

  2. win32 API函数

    cozy的博文 win32 API函数大全   (2008-03-15 16:28) 分类: 个人日记 1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WN ...

  3. C#中导入Win32 API函数

    C#中导入Win32 API的方法: 1.引用命名空间 using System.Net.Security; using System.Runtime.InteropServices; 2. [Dll ...

  4. 调用win32 api 函数SendMessage() 实现消息直接调用

    简单的调用例子, 适合初学者学习,当然 我也是初学者. #include <windows.h> #include <stdio.h> #include <stdlib. ...

  5. C# 通过调用Win32 API函数清除浏览器缓存和cookie

    public enum ShowCommands : int { SW_HIDE = , SW_SHOWNOrmAL = , SW_NOrmAL = , SW_SHOWMINIMIZED = , SW ...

  6. Win32 API编程——前言

    一丶什么是Win32 API? 微软为了保护操作系统的安全性和稳定性,把系统分为内核层和用户层(内核层的代码只能在当CPU的特权级为R0状态下执行,用户层的代码在CPU特权级为R0和R3都能执行),w ...

  7. C#调用Win32 api学习总结

    从.NET平台调用Win32 API Win32 API可以直接控制Microsoft Windows的核心,因为API(Application Programming Interface)本来就是微 ...

  8. 【.Net】从.NET平台调用Win32 API

    小序        Win32 API可以直接控制Microsoft Windows的核心,因为API(Application Programming Interface)本来就是微软留给我们直接控制 ...

  9. WINDOWS-API:API函数大全

    操作系统除了协调应用程序的执行.内存分配.系统资源管理外,同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务是一个函数),可以帮肋应用程序达到开启视窗.描绘图形.使用周边设备的目的,由 ...

随机推荐

  1. CodeForceS#276-B(求最大值)

    B. Valuable Resources   Many computer strategy games require building cities, recruiting army, conqu ...

  2. HDU 2861 (DP+打表)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2861 题目大意:n个位置,m个人,分成k段,统计分法.S(n)=∑nk=0CknFibonacci(k ...

  3. 关于c语言模拟c++的多态

    关于c++多态,个人认为就是父类调用子类的方法,c++多态的实现主要通过虚函数实现,如果类中含有虚函数,就会出现虚函数表,具体c++多态可以参考<深度探索c++对象模型> c语言模拟多态主 ...

  4. ios retain 与 copy 的区别

    .retain 与copy区别 retain 的仅仅是引用计数加1,但是并没有创建新的对象.它们的指针是指向相同的内存地址. copy 是创建一个新的对象作为原来对象的副本,新创建出来的引用计数并没有 ...

  5. ACM: Just a Hook 解题报告 -线段树

    E - Just a Hook Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   D ...

  6. NOIp 2013 #3 转圈游戏 Label:模拟

    题目描述 n 个小伙伴(编号从 0 到 n-1)围坐一圈玩游戏.按照顺时针方向给 n 个位置编号,从0 到 n-1.最初,第 0 号小伙伴在第 0 号位置,第 1 号小伙伴在第 1 号位置,……,依此 ...

  7. BZOJ 1045 题解

    1045: [HAOI2008] 糖果传递 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3502  Solved: 1623[Submit][Sta ...

  8. POJ 2955 Brackets(区间DP)

    题目链接 #include <iostream> #include <cstdio> #include <cstring> #include <vector& ...

  9. fuser 命令的介绍

    fuser 可以显示出当前哪个程序在使用磁盘上的某个文件.挂载点.甚至网络端口,并给出程序进程的详细信息.  fuser显示使用指定文件或者文件系统的进程ID.默认情况下每个文件名后面跟一个字母表示访 ...

  10. win7/IE8无法加载QCbin的插件

    pian A: 1.控制面板->系统和安全->更改用户账户控制设置->安全等级调至最低->关机重启 2.打开IE浏览器->工具->Internet选项->高级 ...