mode d'impression [C] - Programmation
Marsh Posté le 07-08-2001 à 11:57:00
hehe, apparemment, mon post ninteresse pas grand monde,...
pas grave, pour ceux que ca interesse, jai trouve ma reponse ici:
http://support.microsoft.com/suppo [...] 7/3/45.ASP
Marsh Posté le 07-08-2001 à 12:10:48
Ben franchement, ca ne m'interresse pas trop, par contre merci de dire ou tu as trouvé ta réponse. Ca pourras sans doute servir à d'autres.
Un exemple à suivre.
Par ce que des fois, on essaye de répondre, et puis on a un "ok, c'est bon, j'ai trouvé..." mais on ne connait pas le résultat final. Et c'est parfois frustrant.
Marsh Posté le 08-08-2001 à 09:33:49
En 16 (et 32 bits), j'utilise une méthode permettant d'imprimer sur toute imprimante installée mais qui ne modifie PAS l'imprimante par défaut.
void Imprim(void)
{
PRINTDLG pd;
DOCINFO DocInfo;
BYTE NumCopie;
int xPageWidth, yPageHeight;
int LargPage, HautPage;
float RapporYXEcran;
memset(&pd, 0, sizeof(PRINTDLG)); // RAZ
pd.lStructSize = sizeof(PRINTDLG);
pd.hwndOwner = hWnd;
pd.Flags = PD_RETURNDC | PD_HIDEPRINTTOFILE | PD_NOPAGENUMS | PD_NOSELECTION;
pd.nFromPage = 1;
pd.nToPage = 1;
pd.hDevMode = (HANDLE)NULL;
pd.hDevNames = (HANDLE)NULL;
pd.nMinPage = 1;
pd.nMaxPage = 1;
pd.nCopies = 1; // par défaut
if (! PrintDlg(&pd))
{
if ((int)CommDlgExtendedError != 490) // not "Abandon"
{
char *str;
if ((str = (char *)malloc(300)) != NULL)
{
sprintf(str, "Impression du fichier %s impossible.", NomCourtFich);
MessageBox(hWnd, str, NULL, MB_OK | MB_ICONSTOP);
free(str);
}
}
return;
}
xPageWidth = GetDeviceCaps(pd.hDC, HORZRES);
yPageHeight = GetDeviceCaps(pd.hDC, VERTRES);
// si imprimante noir et blanc, imprime en noir (et blanc)
N_B = (GetDeviceCaps(pd.hDC, BITSPIXEL) == 1);
HautPage = GetDeviceCaps(pd.hDC, VERTSIZE);
LargPage = GetDeviceCaps(pd.hDC, HORZSIZE);
memset(&DocInfo, 0, sizeof(DOCINFO));
DocInfo.cbSize = sizeof(DOCINFO);
#ifndef __FLAT__
DocInfo.lpszDocName = "Spectr16"; // le nom de mon appli
#else
DocInfo.lpszDocName = "Spectr32"; // le nom de mon appli
#endif
DocInfo.lpszOutput = NULL;
// nombre exemplaires demandé, tj >= 0 !
if (StartDoc(pd.hDC, &DocInfo) != SP_ERROR)
{ // SINON, Cf GetLastError pour savoir où Pb
EnableWindow(hWnd, FALSE);
bCanceled = FALSE;
StartPage(pd.hDC);
for (NumCopie = 1; NumCopie <= pd.nCopies; NumCopie ++)
{
ZigZagP(pd.hDC); // mon module qui dessine à l'écran, sur l'imprimante
// ou dans un métafichier
EndPage(pd.hDC);
}
EndDoc(pd.hDC); // même si erreur, faut bien finir !
}
EnableWindow(hWnd, TRUE);
if (pd.hDevMode != NULL) GlobalFree(pd.hDevMode);
if (pd.hDevNames != NULL) GlobalFree(pd.hDevNames);
DeleteDC(pd.hDC);
}
// fin du module Imprim
J'ai ôté la cuisine perso qui me sert à règler la taille de la zone de dessin en fonction de la taille du périphérique destination (écran, imprimante, métafichier).
Ca donne une alternative à la méthode Krosoft....
Marsh Posté le 13-08-2001 à 12:54:06
bon, maintenant je me retrouve avec un autre probleme,
j'ai recupere et adapte une fonction de rexuperation de l'imprimante par defaut, en gros ca marche, sauf que dans les informations, je nai aucune imprimante par defaut.
Bien sur, jai correctement défini une imprimante par defaut...
la recuperation se fait bit par bit dans une variable, seulement je recupere "24" pour toutes les imprimantes...
apres verification je realise que ca correspond a
1)default printer
2)shared printer
Code :
|
[edtdd]--Message édité par cthulhu--[/edtdd]
Marsh Posté le 07-08-2001 à 11:34:04
Bonjour a tous,
je désire lancer une impression avec selection de limprimante.
Pour se faire, j'utilise la fonction CreateDC().
Jusque là tout va bien...
Mais voilà je ne comprends pas comment définir l'impression en landscape ouen portrait.
J'ai cru comprendre que c sur le document qu'on travaille, mais je ne trouve pas comment.
mon code au cas ou:
Merci davance