📄 sample7_2.c
字号:
#include <windows.h> #include <wingdi.h> #include <userint.h> #include <ansi_c.h> #include "sample7_2.h" #define MAXALL 10000#define MAXDEFAULT 80 int panelHandle;char defPrinter[MAXDEFAULT];char entryList[MAXALL];char filename[260]=""; int PlaceList(void);int GetPrinterList(void);int PrintFile(char fname[260]) ; int main (int argc, char *argv[]){ if (InitCVIRTE (0, argv, 0) == 0) /* Initialize CVI libraries */ return -1; /* out of memory */ if ((panelHandle = LoadPanel (0, "sample7_2.uir", PANEL)) < 0) return -1; DisplayPanel (panelHandle); GetPrinterList(); PlaceList(); RunUserInterface (); return 0;} int GetPrinterList(void){ if (!GetProfileString ("windows", "Device", "",defPrinter, MAXDEFAULT)) return (-1); if (!GetProfileString ("PrinterPorts", NULL, "",entryList, MAXALL)) return (-1); return 0;}int PlaceList(void){ int index; char *beg, *end, *currEntry; char buffer[512]; beg = defPrinter; while (*beg && *beg == ' ') beg++; end = beg; while (*end && *end != ',') end++; *end = 0; SetCtrlVal(panelHandle, PANEL_PRINTER, beg); ClearListCtrl (panelHandle, PANEL_LISTBOX); currEntry = entryList; index = 1; while (*currEntry) { InsertListItem (panelHandle, PANEL_LISTBOX, -1, currEntry, currEntry); currEntry += strlen (currEntry) + 1; index++; } return 0;}int CVICALLBACK Quit (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ switch (event) { case EVENT_COMMIT: QuitUserInterface (0); break; } return 0;}int CVICALLBACK SelectFile (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ int ret; char buf[260]; switch (event) { case EVENT_COMMIT: ret = FileSelectPopup ("C:\\", "*.TXT", "*.*", "选择打印的文件", VAL_SELECT_BUTTON, 0, 0, 1, 0, buf); if(ret==VAL_EXISTING_FILE_SELECTED) { strcpy(filename,buf); SetCtrlVal (panelHandle, PANEL_PRINTFILE, filename); } break; } return 0;}int CVICALLBACK Print (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ switch (event) { case EVENT_COMMIT: if(strlen(filename)>0) PrintFile(filename); else MessagePopup("ERROR","No file selected"); break; } return 0;}int CVICALLBACK ListBox (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){ switch (event) { case EVENT_COMMIT: GetCtrlVal (panelHandle, PANEL_LISTBOX, defPrinter); SetCtrlVal (panelHandle, PANEL_PRINTER,defPrinter ); break; } return 0;}void SetPrinterWin(HDC prn,int *LinesPerPage,int *CharHeight,int * orig_x,int *orig_y){ int height,width,CharWidth,pageHeight; TEXTMETRIC textMetric; GetTextMetrics(prn,&textMetric); *CharHeight=textMetric.tmHeight+textMetric.tmExternalLeading; CharWidth=textMetric.tmAveCharWidth+textMetric.tmOverhang; height=GetDeviceCaps(prn, VERTRES); width=GetDeviceCaps(prn, HORZRES); *orig_x=(width-CharWidth*40)/2; //40 chars per line *orig_y=300; pageHeight=220.0/GetDeviceCaps(prn, VERTSIZE)*height; *LinesPerPage=pageHeight/(*CharHeight); SetMapMode (prn, MM_TEXT) ; } int PrintFile(char fname[260]){ int LinesPerPage,CharHeight,orig_x,orig_y,i=0; FILE * fp; HDC prn; int page; char text[41]; DOCINFO docinfo; docinfo.cbSize=sizeof(docinfo); docinfo.lpszDocName="Mydoc"; docinfo.lpszOutput=NULL; docinfo.lpszDatatype=NULL; docinfo.fwType=0; fp=fopen(fname,"r"); prn=CreateDC(NULL,(LPTSTR)defPrinter,NULL,NULL); if(prn!=NULL) { //set block for printint SetPrinterWin(prn,&LinesPerPage,&CharHeight,&orig_x,&orig_y) ; StartDoc(prn,&docinfo); page=0; while(1) { page++; StartPage(prn); for(i=0;i<LinesPerPage;i++) { if(fgets (text, 40, fp)==NULL) { sprintf(text,"第%d页",page); TextOut(prn,orig_x,orig_y+CharHeight*(LinesPerPage+1),text,strlen(text)); EndPage(prn); goto lp; } TextOut(prn,orig_x,orig_y+CharHeight*i,text,strlen(text)); } sprintf(text,"第%d页",page); TextOut(prn,orig_x,orig_y+CharHeight*(LinesPerPage+1),text,strlen(text)); EndPage(prn); }lp: EndDoc(prn); fclose(fp); DeleteDC(prn); return 1; } else return 0; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -