在vc6。0下如何打印?

Dereknumone 2007-03-22 01:08:25
我在控制台下写了个画圆的程序,我怎样才能将这个圆通过打印机打印出来
...全文
396 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dereknumone 2007-03-23
  • 打赏
  • 举报
回复
编译命令行选项
在那里看啊
辛苦你了
谢谢
hailongchang 2007-03-23
  • 打赏
  • 举报
回复
你看看你是不是没有winspool.lib和comdlg32.lib呀?
hailongchang 2007-03-23
  • 打赏
  • 举报
回复
我专门给你写了一个程序,肯定能运行啊
hailongchang 2007-03-23
  • 打赏
  • 举报
回复
/SUBSYSTEM:CONSOLE /MACHINE:X86 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

这是编译命令行选项
Dereknumone 2007-03-23
  • 打赏
  • 举报
回复
加了
我是2000的系统
你能运行吗?
hailongchang 2007-03-23
  • 打赏
  • 举报
回复
要加这个

#define _WIN32_WINNT 0x0500

另外要是2000,xp系统
Dereknumone 2007-03-23
  • 打赏
  • 举报
回复
E:\vc6.0\MSDev98\MyProjects\sfds\asd.cpp(15) : error C2065: 'GetConsoleWindow' : undeclared identifier
E:\vc6.0\MSDev98\MyProjects\sfds\asd.cpp(15) : error C2440: 'initializing' : cannot convert from 'int' to 'struct HWND__ *'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
E:\vc6.0\MSDev98\MyProjects\sfds\asd.cpp(49) : error C2440: '=' : cannot convert from 'void *' to 'struct _PRINTER_INFO_4A *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
Error executing cl.exe.

sfds.exe - 3 error(s), 0 warning(s)

hailongchang 2007-03-23
  • 打赏
  • 举报
回复
什么错误?
Dereknumone 2007-03-23
  • 打赏
  • 举报
回复
运行抱错啊
hailongchang 2007-03-23
  • 打赏
  • 举报
回复
楼主,下面是一个在cosole窗口画一个绿色的圆和打印的程序

可以输出位office document格式^_^

good luck!

#define _WIN32_WINNT 0x0500
#include<windows.h>
#include<stdio.h>

int main()
{

PRINTDLG pd;

PRINTER_INFO_4 *pinfo4;
PRINTER_INFO_5 *pinfo5;
DWORD dwNeeded,dwReturned;
DOCINFO di;

HWND hwnd = GetConsoleWindow();

HDC hDC=GetDC(hwnd);
HPEN hPen,hOldPen;

hPen=CreatePen(PS_SOLID,2,0x00ff00);
hOldPen=(HPEN)SelectObject(hDC,hPen);


memset( &di, 0, sizeof(DOCINFO) );
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = "OFFICE Document";
di.lpszOutput = (LPTSTR) NULL;
di.fwType = 0;

ZeroMemory(&pd, sizeof(pd));
pd.lStructSize = sizeof(pd);
pd.hwndOwner = NULL;
pd.hDevMode = NULL;
pd.hDevNames = NULL;
pd.Flags = PD_USEDEVMODECOPIESANDCOLLATE | PD_RETURNDC;
pd.nCopies = 1;
pd.nFromPage = 0xFFFF;
pd.nToPage = 0xFFFF;
pd.nMinPage = 1;
pd.nMaxPage = 0xFFFF;

Arc(hDC,100,100,300,300,350,500,350,500);
SelectObject(hDC,hOldPen);
ReleaseDC(hwnd,hDC);

if(PrintDlg(&pd)==TRUE)
{
EnumPrinters(PRINTER_ENUM_LOCAL,NULL,4,NULL,0,&dwNeeded,&dwReturned);
pinfo4 = malloc(dwNeeded);
EnumPrinters(PRINTER_ENUM_LOCAL,NULL,4,(PBYTE)pinfo4,dwNeeded,&dwNeeded,&dwReturned);
pd.hDC = CreateDC(NULL,pinfo4->pPrinterName,NULL,NULL);
StartDoc(pd.hDC, &di);
hPen=CreatePen(PS_SOLID,2,0x00ff00);
hOldPen=(HPEN)SelectObject(pd.hDC,hPen);
Arc(pd.hDC,100,100,300,300,350,500,350,500);
EndDoc(pd.hDC);
SelectObject(pd.hDC,hOldPen);
DeleteDC(pd.hDC);
}
system("pause");
}
Dereknumone 2007-03-23
  • 打赏
  • 举报
回复
还有个问题
画出的图形不能重绘
当窗体最小化后图形消失了
hailongchang 2007-03-23
  • 打赏
  • 举报
回复
不能预览,你可以装一个office 2003就能看到了

我的代码就是根据昨天帮你改的那个帖子上的代码写的

http://community.csdn.net/Expert/topic/5411/5411215.xml?temp=.6630976

Dereknumone 2007-03-23
  • 打赏
  • 举报
回复
还是报错
可以预览吗?
我现在这里没有打印机
我只需要预览后能看见我画的图形
你可以在我的代码上加打印函数吗?
谢谢
hailongchang 2007-03-23
  • 打赏
  • 举报
回复
我得画圆和你得一样得
//在控制台输出圆
hPen=CreatePen(PS_SOLID,2,0x00ff00);
hOldPen=(HPEN)SelectObject(hDC,hPen);
Arc(hDC,100,100,300,300,350,500,350,500);
SelectObject(hDC,hOldPen);
ReleaseDC(hwnd,hDC);
//在打印机上输出圆
pd.hDC = CreateDC(NULL,pinfo4->pPrinterName,NULL,NULL);
StartDoc(pd.hDC, &di);
hPen=CreatePen(PS_SOLID,2,0x00ff00);
hOldPen=(HPEN)SelectObject(pd.hDC,hPen);
Arc(pd.hDC,100,100,300,300,350,500,350,500);
EndDoc(pd.hDC);
SelectObject(pd.hDC,hOldPen);
这回你看明白了吧!

其他代码都是设置打印机的。如果你不能编译,可以装一个vc2003,我的vc6 sdk是升级过的。
Dereknumone 2007-03-23
  • 打赏
  • 举报
回复
#include <windows.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>


补上头文件
Dereknumone 2007-03-23
  • 打赏
  • 举报
回复
int main(int argc, char* argv[])
{
char arg[50]={0};
arg[0]='\"';
strcpy(arg+1,argv[0]);
int len=int(strlen(arg));
arg[len]='\"';


HWND hWnd=FindWindow(NULL,arg); //找到程序运行窗口的句柄
HDC hDC=GetDC(hWnd);//通过窗口句柄得到该窗口的设备场境句柄
HPEN hPen,hOldPen; //画笔
int i=0;

for(;i<500;++i)

hPen=CreatePen(PS_SOLID,2,0x00ff00);//生成绿色画笔
hOldPen=(HPEN)SelectObject(hDC,hPen);//把画笔引入设备场境

//Arc(hDC,100,100,300,300,350,500,350,500);//画圆
Arc(hDC,200,200,300,300,350,500,350,500);//画圆

SelectObject(hDC,hOldPen);
ReleaseDC(hWnd,hDC);

return 0;
}


我的画圆的代码
你能帮我修改下
让它打印出来吗?
你的代码看不明白
hailongchang 2007-03-23
  • 打赏
  • 举报
回复
你把程序存为 *.c

在命令行下输入:

cl *.c kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

或者在工程设置里面有选项的
Dereknumone 2007-03-22
  • 打赏
  • 举报
回复
能给个打印的原代码我研究吗?
看不明白文章
jixingzhong 2007-03-22
  • 打赏
  • 举报
回复
VC下打印机的使用
http://www.77169.com/classical/HTML/36235.html
jixingzhong 2007-03-22
  • 打赏
  • 举报
回复
VC打印实践浅谈
http://www.7788ok.com/teach/view.asp?id=11830
加载更多回复(5)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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