代码改变世界

随笔分类 -  win32编程

VC中添加WM_DEVICECHANGE消息(经典)

2011-10-31 12:53 by 捣乱小子, 14834 阅读, 收藏, 编辑
摘要: 在mfc添加WM_DEVICECHANGE不像添加WM_MOUSEMOVE(举例)等等那样直接鼠标点击之后就自动添加。当中是有封装WM_DEVICECHANGE消息的(CWnd::OnDeviceChange),括号里的东西就是msdn里面的东西,就是说CWnd是有这个函数的。在开发的时候,我们不得不手动添加,而不是用IDE的自动添加功能。所以如果不了解mfc的消息机制的话,看起来会比较晦涩。入主题。①添加消息映射BEGIN_MESSAGE_MAP(CFileCopyDlg, CDialog)……ON_WM_DEVICECHANGE()……END_MESSAGE_MAP()②在窗口类当中添加消 阅读全文

win32 又一个经典爽歪歪的api,太强大了SHGetFileInfo

2011-10-29 23:27 by 捣乱小子, 1061 阅读, 收藏, 编辑
摘要: 今天突发奇想在将来学会(从事)桌面软件的设计,因为在windows下桌面的快捷便利性是很受到众多网友们的爱戴的,而且一款好的桌面软件能给常年工作于计算机的友友们带来不可忽略的效率,甚至可以赏心悦目,让大家都爱不释手的。如果软件很臃肿,除非很多的用户对其有特别的依赖性,不然它很快会被大众埋没。不废话了,直接如题。SHGetFileInfo是一个非常实用的api。DWORD_PTRSHGetFileInfo(LPCTSTRpszPath,DWORDdwFileAttributes,SHFILEINFO*psfi,UINTcbFileInfo,UINTuFlags);参数一是文件的路径不解释三是结构 阅读全文

win32系统托盘图标,对vc编程很有帮助

2011-10-27 19:32 by 捣乱小子, 2357 阅读, 收藏, 编辑
摘要: 很不错的一个例子,对理解系统托盘很有帮助,以后实验用得着的。#include <windows.h>#define IDR_PAUSE 12#define IDR_START 13/*#include <shellapi.h>#pragma comment(lib, "shell32.lib") */LPCTSTR szAppName = TEXT("服务程序");LPCTSTR szWndName = TEXT("服务程序");HMENU hmenu;//菜单句柄LRESULT CALLBACK WndPro 阅读全文

win32的时间api

2011-10-24 21:08 by 捣乱小子, 1187 阅读, 收藏, 编辑
摘要: 在时间函数当中会用到两个比较常用的函数,GetSystemTime和GetLocalTime,其中前者是得到格林威治时间,后者是得到当地的时间,大家知道格林威治时间是世界标准时间,我们国家用的是北京时间,而北京在在东八区,自然要加八个小时。在一些软件日志和数据录入(比如销售详明)都会调用时间函数。 不说那么多,直接上代码: #include <windows.h>#include <std... 阅读全文

win32GDI函数BitBlt

2011-10-19 20:36 by 捣乱小子, 3946 阅读, 收藏, 编辑
摘要: 今天又充电了。 平时输出文字一般都是用textout或者drawtext。而今天遇到绘制绘图的问题,但是这个不能顾名思义的说直接在客户区draw就可以了,win32有特俗的处理方法。 要在一个设备环境中绘制位图,我们不能直接话,按msdn里面的说法,我们要创建一个与当前设备环境相兼容的另一个设备环境;将位图选入新创建的设备环境后,再调用bitblt函数来显示位图,bitblt就实现了将位图... 阅读全文

在测试第一个动态链接库的时候遇到的GetTextExtentPoint()

2011-10-18 19:08 by 捣乱小子, 1073 阅读, 收藏, 编辑
摘要: 在vs2008测试第一个动态链接库的项目,很久以前就对动态链接库感兴趣,因为他可以让可执行程序变的小一点,减轻程序的负担。.h的代码#ifdef __cplusplus#define EXPORT extern "C" __declspec (dllexport)#else#define EXPORT __declspec(dllexport)#endifEXPORT BOOL CALLBACK EdrCenterTextA(HDC,PRECT,PCSTR);EXPORT BOOL CALLBACK EdrCenterTextW(HDC,PRECT,PCWSTR);#ifd 阅读全文

win32的一个售票程序,收获有非常的多

2011-10-15 10:23 by 捣乱小子, 746 阅读, 收藏, 编辑
摘要: 先秀一下我的收获吧!1、在创建非模态对话框的时,需要用到createdialog函数,第二个参数需要注意是填写对话框的资源标识符(id),之后需要调用showwindow来显示对话框;或者不这么做也行,就是在对话框属性visiable设置为true;2、hdc变量最好在函数内初始化,别将它直接传入函数;3、WM_SIZE的wParam参数很有用;4、关于movewindowMoveWindow sends the WM_WINDOWPOSCHANGING, WM_WINDOWPOSCHANGED, WM_MOVE, WM_SIZE, and WM_NCCALCSIZE messages to 阅读全文

win32关于WM_QUERYENDSESSION消息

2011-10-12 18:08 by 捣乱小子, 2858 阅读, 收藏, 编辑
摘要: 当结束对话或者一个程序调用系统关闭功能的时候,WM_QUERYENDSESSION消息会被发送给尚未终止的所有窗口。当程序在处理这个消息的时候,如果返回了false(0),那么系统将不结束对话或者关机(注销)。所以在处理这消息的时候,我们要有个好的习惯,就是对数据进行保护操作,以免造成数据的损失。网摘了一个比较经典的解释:原理:Windows在关机的时候会想所有顶层窗口广播一个消息WM_QUERYENDSESSION,其lParam参数可以区分是关机还是注销用户(注销用户时lParam是ENDSESSION_LOGOFF)。然后Windows会等到所有的应用程序都对这个消息返回TRUE才会关机 阅读全文

win32 API函数大全

2011-10-10 12:57 by 捣乱小子, 1164 阅读, 收藏, 编辑
摘要: 1.API之网络函数WNetAddConnection创建同一个网络资源的永久性连接WNetAddConnection2创建同一个网络资源的连接WNetAddConnection3创建同一个网络资源的连接WNetCancelConnection结束一个网络连接WNetCancelConnection2结束一个网络连接WNetCloseEnum结束一次枚举操作WNetConnectionDialog启动一个标准对话框,以便建立同网络资源的连接WNetDisconnectDialog启动一个标准对话框,以便断开同网络资源的连接WNetEnumResource枚举网络资源WNetGetConnect 阅读全文

win32简单的剪切板文本查看器

2011-10-09 22:53 by 捣乱小子, 953 阅读, 收藏, 编辑
摘要: 剪切板很有意思,捣乱又学会了setclasslong()#include <windows.h>#define CLSNAME "Clipview"#define WNDNAME ""LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam );int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmd... 阅读全文

win32自定义控件(虽然不美观,但对理解很有好处)

2011-10-09 20:26 by 捣乱小子, 3472 阅读, 收藏, 编辑
摘要: win32的自定义控件不是很美观,但是对控件有个比较底层的认识,值了。 #include <windows.h>#include "resource.h"#define CLSNAME "About3"#define WNDNAME "about3 demo"LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam );LRESULT CALLBACK EllipPushWndProc(HWND,UINT,WPARAM,LP 阅读全文

win32剪切板学习笔记

2011-10-09 19:59 by 捣乱小子, 511 阅读, 收藏, 编辑
摘要: win32 api的剪切板操作很有趣。 ①数据准备好后,向剪切板传输数据需要步骤: HGLOBAL hGlobal;PTSTR pGlobal;hGlobal = ::GlobalAlloc(GHND|GMEM_SHARE,iSize);//其中#define GHND (GMEM_MOVEABLE | GMEM_ZEROINIT)pGlobal = (PTSTR)::GlobalLoc... 阅读全文

win32只创建一个对话框的程序(很有趣)

2011-10-08 20:34 by 捣乱小子, 572 阅读, 收藏, 编辑
摘要: 只创建一个对话框的程序,诱发了我很大的兴趣。#include <windows.h>#include <commdlg.h>int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){ static CHOOSECOLOR cc; static COLORREF crCustColors[16]; cc.lStructSize = sizeof(CHOOSECOLOR); cc.hwndOwner = NULL; cc.hInstance = N 阅读全文

模态对话框和非模态对话框的消息

2011-10-06 10:54 by 捣乱小子, 347 阅读, 收藏, 编辑
摘要: 模态对话框在创建后,主程序的的消息循环是空的(除非对话框给主程序发送消息就另当别论了),就是与系统消息循环断开联系了,而进入了自己独有的一个消息循环。然而非模态对话框在创建后立即返回,并且和主程序共用一个消息循环。 阅读全文

win32消息参数以及如何获取窗口实例句柄hInstance

2011-10-04 15:13 by 捣乱小子, 5235 阅读, 收藏, 编辑
摘要: wParam和lParam消息(转)1 WM_PAINT消息,LOWORD(lParam)是客户区的宽,HIWORD(lParam)是客户区的高。2 滚动条WM_VSCROLL或WM_HSCROLL消息,LOWORD(wParam)指出了鼠标对滚动条的操作。比如上、下、左、右、翻页、移动等。3 击键消息,有WM_SYSKEYDOWN、WM_SYSKEYUP、WM_KEYUP、WM_KEYDOWN,其中wParam是虚拟键代码,lParam是包含属于击键的其他信息。lParam消息参数分为6个域,有重复计数、环境代码、键的先前状态等。4 字符消息WM_CHAR、WM_DEADCHAR、WM_SY 阅读全文

win32 GetMenu()和GetSubMenu()

2011-09-28 22:59 by 捣乱小子, 5801 阅读, 收藏, 编辑
摘要: 这两个函数还是挺有用的。 首先GetMenu()是获取菜单项的菜单句柄,注意这里菜单,而不是子菜单,当然里边还可以有几个菜单项。 然后GetSubMenu()是获取子菜单的句柄。很有趣的是,子菜单可能还存在子菜单,如此递归,可以往复使用,这取决于hMenu参数。 hMenu = ::GetMenu(hwnd); hMenu = ::GetSubMenu(hMenu,1); ::DeleteMenu(hMenu,0,MF_BYPOSITION); 此代码就达到了删除第二个菜单项的第一个子菜单的目的。 但是如果再次调用SetMenu的话会出错,这里要请高手解答,小弟不明。 ... 阅读全文

win32建立弹出式菜单

2011-09-28 20:17 by 捣乱小子, 664 阅读, 收藏, 编辑
摘要: 先秀一下MSDN中学到的语句:if any,中文翻译:如果有的话(做做笔记啦)。在新建了一个菜单资源之后,将菜单的属性设置Popup属性为true。先要加载菜单资源LoadMenu,接下来要在鼠标右键按下消息上显示弹出式菜单了TrackPopupMenu。查看了MSDN这个函数之前还是要利用另一个函数来获得子菜单的,hMenu[in] Handle to the shortcut menu to be displayed. The handle can be obtained by calling CreatePopupMenu to create a new shortcut menu, o 阅读全文

win32在程序当中引用菜单

2011-09-28 12:47 by 捣乱小子, 346 阅读, 收藏, 编辑
摘要: 可以给菜单指定一个和程序名相同的字符串ID,这样很方便我们调用菜单,可以在窗口类定义中引用这个菜单:wndclass.lpszMenuName = szAppName;而省去了其他复杂的操作。当然我们也可以用传统的方法:hMenu = LoadMenu(hInstance,TEXT(“MyMenu”));//如果Menu的ID是字符串hMenu = LoadMenu(hInstance,MAKEINTRESOURCE(ID_MENU));//如果Menu的ID是数字之后在createwindow的倒数第三个参数上指定为hMenu。或者直接在创建窗口后指派一个菜单:SetMenu(hwnd,hM 阅读全文

GetMessage用法错误导致程序不能退出

2011-09-27 22:53 by 捣乱小子, 1633 阅读, 收藏, 编辑
摘要: #include <windows.h>#include <stdio.h>LRESULT CALLBACK WinUoowProc( //回调函数声明HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);int WINAPI WinMain( HINSTANCE hInstance, //WinMain主函数HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){WNDCLASS wndcls; // 创建窗口类wndcls.cbClsExtra=0;wndcls.cbWn 阅读全文

WM_COMMAND和WM_KEYDOWN消息的wParam,lParam参数

2011-09-26 17:42 by 捣乱小子, 1919 阅读, 收藏, 编辑
摘要: WM_COMMAND消息: 菜单 控件(注意是控件不是按键) LOWORD(wParam) 菜单id 控件id HIWORD(wParam) 0 通知码 lParam ... 阅读全文