请有经验的朋友帮个忙。调用PrintDlg()函数后,想取回USER所使用的打印机的名字

rtdb 2003-09-25 04:37:00
本来在PRINTDLG有个 HANDLE hDevMode;

指向的DEVMODE中有个 BCHAR dmDeviceName[CCHDEVICENAME];

可它是乱码, 不知如何转换出来。


这方面我没什么经验,请大家帮助。

...全文
46 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
rtdb 2003-09-29
  • 打赏
  • 举报
回复
原来少用了GlobalLock(),多谢大家,结帐了。
ninsenki 2003-09-26
  • 打赏
  • 举报
回复
GetDeviceName()没错啊,怎么会是乱码呢
bluebohe 2003-09-26
  • 打赏
  • 举报
回复
怎么可能是乱码?那应该是你PrintDlg没有初始化?或者没有得到缺升打印机?把你的乱码值能帖一下吗?看一下是没有初始化,还是初始化成乱码的
rtdb 2003-09-26
  • 打赏
  • 举报
回复
谢谢。

可惜现在是用SDK。 如果有哪位朋友用过?
wuxfBrave 2003-09-26
  • 打赏
  • 举报
回复
LPDEVMODE lpDevMode = (LPDEVMODE)GlobalLock(dlg.m_pd.hDevMode);

CString str = lpDevMode->dmDeviceName;

更简单的方法是
CString strName = dlg.GetDeviceName();

乱码是不是你转换时出的问题啊

rtdb 2003-09-26
  • 打赏
  • 举报
回复
自己UP。 最近大家都在忙别的啊。
rtdb 2003-09-26
  • 打赏
  • 举报
回复
多谢bluebohe(薄荷), 帮朋友问的, 我让她去试一下。
bluebohe 2003-09-26
  • 打赏
  • 举报
回复
注意几点,1:只有在打印对话框确定后,才可以得到pd
2:DEVMODE *p=(LPDEVMODE)::GlobalLock(pd.hDevMode);得到结构体
3:上面的程序并不完整,用完后要GlobalUnlock结构体
bluebohe 2003-09-26
  • 打赏
  • 举报
回复
你看一下下面这些代码,
ZeroMemory(&pd, sizeof(PRINTDLG));
pd.lStructSize = sizeof(PRINTDLG);
pd.hwndOwner = AfxGetApp()->m_pMainWnd->m_hWnd;
pd.hDevMode = NULL; // Don't forget to free or store hDevMode
pd.hDevNames = NULL; // Don't forget to free or store hDevNames
pd.Flags = PD_USEDEVMODECOPIESANDCOLLATE | PD_RETURNDC;
pd.nCopies = 1;
pd.nFromPage = 0xFFFF;
pd.nToPage = 0xFFFF;
pd.nMinPage = 1;
pd.nMaxPage = 0xFFFF;

if (PrintDlg(&pd)==TRUE)
{
// GDI calls to render output.
DEVMODE *p=(LPDEVMODE)::GlobalLock(pd.hDevMode);;
// Delete DC when done.
DeleteDC(pd.hDC);
}

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧