Win32 编程学习笔记
1、WIN32 控件加背景图片
case WM_PAINT:
{
HBITMAP hbm;
BITMAP bminfo;
hbm = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1));
GetObject(hbm, sizeof(bminfo), &bminfo);
PAINTSTRUCT ps;
HDC dc = BeginPaint(hwndDlg, &ps);
HDC memdc = CreateCompatibleDC(dc);
SelectObject(memdc, hbm);
// BitBlt(dc,0,0,bminfo.bmWidth,bminfo.bmHeight,memdc,0,0,SRCCOPY);
::StretchBlt(dc, 0, 0, 990, 404, memdc, 0, 0, bminfo.bmWidth, bminfo.bmHeight, SRCCOPY);
DeleteDC(memdc);
EndPaint(hwndDlg, &ps);
}
return TRUE;
2、WIN32 窗体半透明
#define WS_EX_LAYERED 0x00080000//扩展样式
#define WS_EX_LAYERED 0x00080000
hwnd = CreateWindowEx(WS_EX_LAYERED,
lpszClassName,
lpszTitle,
WS_CAPTION | WS_SYSMENU,
CW_USEDEFAULT, CW_USEDEFAULT,
iWindowWidth, iWindowHeight,
NULL,
NULL,
hInstance,
NULL);
typedef BOOL(WINAPI *lpfn) (HWND hWnd, COLORREF cr, BYTE bAlpha, DWORD dwFlags);
lpfn g_pSetLayeredWindowAttributes;
// 获取函数 SetLayeredWindowAttributes 在User32.dll中的指针
HMODULE hUser32 = GetModuleHandle("USER32.DLL");
g_pSetLayeredWindowAttributes = (lpfn)GetProcAddress(hUser32, "SetLayeredWindowAttributes");
(*g_pSetLayeredWindowAttributes)(hwnd, RGB(250, 0, 0), 215, 2);
注意:如果是从资源文件中创建的窗口,要在资源文件(*.rc)扩展样式中加上 |0x00080000
3、WIN32 修改窗体样式
int gwl_style=-16 ;
long oldstyle ;
oldstyle=GetWindowLong(hwndDlg,gwl_style);
SetWindowLong(hwndDlg,gwl_style,oldstyle|WS_EX_LAYERED);
4、按钮加背景图片
case WM_PAINT:
{
HBITMAP hbm;
BITMAP bminfo;
hbm = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1));
GetObject(hbm, sizeof(bminfo), &bminfo);
PAINTSTRUCT ps;
HDC dc = BeginPaint(hwnd, &ps);
HDC memdc = CreateCompatibleDC(dc);
SelectObject(memdc, hbm);
BitBlt(dc, 0, 0, bminfo.bmWidth, bminfo.bmHeight, memdc, 0, 0, SRCCOPY);
DeleteDC(memdc);
EndPaint(hwnd, &ps);
break;
}
5、COMBOX 控件下拉大小的设置
点击如图倒三角然后拖动边框
6、从 CodeBlocks 下的 GUI 程序移植到 VC 6.0 注意事项
要增加如下代码
// 开启视觉效果
#pragma comment(lib, "Comctl32.lib")
#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
}
7、为控件设置文本
SetWindowText(GetDlgItem(hwndDlg, SETXONC), "0x13");
SetWindowText(GetDlgItem(hwndDlg, SETXOFFC), "0x19");
SetWindowText(GetDlgItem(hwndDlg, SETTO), "0");
8、WIN32 下 RadioBox 默认选中
SendDlgItemMessage(hwndDlg, RDCHAR, BM_SETCHECK, 1, 0); // 把RadioBox RDCHAR设置为选中
注意:在设置为默认选中的时候要把单选按钮(Radiobox)分组。 方法:把需要分组的按钮放到一个 groupbox 中,然后把其中的一个 RadioBox 的属性设为组
9、减小生成的 EXE 体积
#pragma comment (linker, "/OPT:NOWIN98")
//自定义函数入口
#pragma comment(linker, "/ENTRY:EntryPoint")
//自定义对齐方式
#pragma comment (linker, "/ALIGN:512")
#pragma comment(linker, "/FILEALIGN:512")
// 优化选项
#pragma comment(linker, "/opt:nowin98")
#pragma comment(linker, "/opt:ref")
#pragma comment (linker, "/OPT:ICF")
// 合并区段
#pragma comment(linker, "/MERGE:.rdata=.data")
#pragma comment(linker, "/MERGE:.text=.data")
#pragma comment(linker, "/MERGE:.reloc=.data")
10、判断 Radiobox 是否选中的方法
#define Button_GetCheck(hwndCtl) ((int)(DWORD)SNDMSG((hwndCtl), BM_GETCHECK, 0L, 0L))
void CheckDisplayStation(HWND hwndDlg)
{
UINT discheck;
discheck = Button_GetCheck(GetDlgItem(hwndDlg, RDHEX));
if (discheck == BST_CHECKED){//16进制显示
DisplayHex(1);
}
if (discheck == BST_UNCHECKED){//字符显示
DisplayHex(0);
}
}
11、Combox 增加数据项
SendDlgItemMessage(hwndDlg, SETCOMNO, CB_ADDSTRING, 0, (LPARAM)("Cc"));
12、字符转16进制(对于单片机非常有用)
char szBuf[10]; // 缓存区
GetWindowText(GetDlgItem(hwndDlg, SDTEXT), szBuf, 10);
int t1, t2;
if ( // 过滤数据
((szBuf[0] >= 'A'&&szBuf[0] <= 'F') || (szBuf[0] >= 'a'&&szBuf[0]<'=f') || (szBuf[0] >= '0'&&szBuf[0] <= '9'))
&&
((szBuf[1] >= 'A'&&szBuf[1] <= 'F') || (szBuf[1] >= 'a'&&szBuf[1] <= 'f') || (szBuf[1] >= '0'&&szBuf[1] <= '9'))
){
if (szBuf[0] >= 'a'&&szBuf[0]<'=f'){//小写字母
t1 = szBuf[0] - 87;
}
else if (szBuf[0] >= 48 && szBuf[0] <= 57){//数字
t1 = szBuf[0] - 48;
}
else if (szBuf[0] >= 'A'&&szBuf[0] <= 'F')//大写字母
{
t1 = szBuf[0] - 55;
}
if (szBuf[1] >= 'a'&&szBuf[1]<'=f'){//小写字母
t2 = szBuf[1] - 87;
}
else if (szBuf[1] >= 48 && szBuf[1] <= 57){//数字
t2 = szBuf[1] - 48;
}
else{//大写字母
t2 = szBuf[1] - 55;
}
SendChar(t1 * 16 + t2);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论