如何从PRINTDLG 结构体中获得打印机的名称
来源:互联网 发布:mac浏览图片的软件 编辑:程序博客网 时间:2024/06/05 09:51
如何从PRINTDLG 结构体中获得打印机的名称?
http://msdn.microsoft.com/zh-cn/site/ms646843
里面的字就是看不懂,似乎是说调用 PrintDlg 之后, hDevMode中会指向一个DEVMODE对象,但是我使用
DEVMODE *devmode = (DEVMODE*)pd.hDevMode;
DEVNAMES *devname = (DEVNAMES*)pd.hDevNames;
会发现dmDeviceName就是乱七八糟的东西,根本不是想要的。
typedef struct tagPD { DWORD lStructSize; HWND hwndOwner; HGLOBAL hDevMode; HGLOBAL hDevNames; HDC hDC; DWORD Flags; WORD nFromPage; WORD nToPage; WORD nMinPage; WORD nMaxPage; WORD nCopies; HINSTANCE hInstance; LPARAM lCustData; LPPRINTHOOKPROC lpfnPrintHook; LPSETUPHOOKPROC lpfnSetupHook; LPCTSTR lpPrintTemplateName; LPCTSTR lpSetupTemplateName; HGLOBAL hPrintTemplate; HGLOBAL hSetupTemplate;} PRINTDLG, *LPPRINTDLG;
HGLOBAL
所以:是兼容以前windows 3.x时代的16位内存分配API的数据,表示一个内存块,这个内存块是GlobalAlloc分配的,需要GlobalLock才能取得内存块的指针。不过在Win32下,这个数据和Global内存分配函数完全没有用了,保留下来只是为了兼容。而且在Win32下,HGLOBAL就是一个void *的指针,可以不用GlobalLock直接使用来访问内存。HGLOBAL 这个是windows 定义的数据类型。这是个句柄,标示一个内存区,不是指针。在对内存区的操作中,一般用指针,从这个handle可以得到指针,然后就可以对内存区进行操作了。GlobalUnlock函数解除锁定的内存块,使指向该内存块的指针无效,GlobalLock锁定的内存,一定要用GlobalUnlock解锁--------------------------------------------------eg: 开一个200byte的内存区,在里面赋值HGLOBAL hMemHandle=::GlobalAlloc(GHND,50*sizeof(int)); //得到handleint *p=(int *)::GlobalLock(hMemHandle); //从handle得到指针for(int k=0;k<50;k++) *(p+k)=k;char s[128];sprintf(s,"testing:p[49]=%i",p[49]);::GlobalUnlock(hMemHandle); //::GlobalFree(p);AfxMessageBox(s);开辟一个新的内存区域,用一指针指向此地址区域,通过指针完成对内存区域的操作。记住用指针指向的时候要 ::GlobalLock(), 操作完成后,::GlobalUnlock()此内存区域的句柄,然后,::GlobalFree()掉此指针。
pd来自printDlg函数
devmode = (DEVMODE*)::GlobalLock(pd.hDevMode);
- 如何从PRINTDLG 结构体中获得打印机的名称
- PRINTDLG结构体详解
- 15 如何从枚举中获得枚举项名称值
- 如何获得电脑的名称
- 如何在java方法中获得当前方法的名称
- 如何在C++中获得完整的类型名称
- 如何在C++中获得完整的类型名称
- 从Linux内核代码中学习获得结构体成员偏移量的方法
- 如何获得ios设备的硬件名称
- 如何获得当前设备的名称
- PRINTDLG
- 如何获得ResultSet的结构
- C# 从工程资源中获得资源名称
- js中获得工程名称的方法
- TestNG 中获得测试方法的名称
- 如何从在JAVA项目中获得配置文件的路径
- 如何从R中获得免费的小型数据集
- DB2_ 如何从系统编目中获得有用的信息
- 读入
- Tomcat部署Web应用方法总结 - yangxueyong的专栏 - 博客频道 - CSDN.NET
- dom4j通过xpath查询xml
- Linux进程休眠和唤醒
- 加密算法
- 如何从PRINTDLG 结构体中获得打印机的名称
- 信息系统项目管理师学习札记1
- RemoTI内SimpleApp的点对点通信问题
- 北邮2012年复试上机题目
- Linux下Tomcat的启动、关闭、杀死进程 - 李晨专栏 - 51CTO技术博客
- java实现数据结构——栈Stack与队列Queue
- python中的cPickle用法例子
- iphone数据存储之-- Core Data的使用(一)
- 言葉の勉強(1)