GetDeviceCaps(hdc,LOGPIXELSX)返回值不对的问题 5C

HDC hdc = ::GetDC(NULL);
int horizontalDPI = ::GetDeviceCaps(hdc,LOGPIXELSX);
以上为具体代码,我的机器环境是win10x64+VS2010,建立MFC项目时,**该语句的执行结果是192**(该结果是正确的,我机器是surface pro4,**高分辨屏幕**),但是建立WIN32项目时(不采用MFC,利用SDK开发),**获取的结果却是96**,有知道原因的吗?
我用JAVA测试过,获取的结果也是192(192才是正确的结果)

1个回答

问题找到了!SDK项目要自己调用SetProcessDPIAware(),以声明程序支持DPI缩放,猜测MFC应该是自动调用了该函数

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
GetDeviceCaps(hdc,HORZSIZE)和GetDeviceCaps(hdc,VERTSIZE)的返回值?
我看里说GetDeviceCaps(hdc,HORZSIZE)和GetDeviceCaps(hdc,VERTSIZE)在WinNT下固定返回320,240 ,可在我家的一台XP上返回的是266,200,与我家的显示器(15")是一致的,而在另一台XP的机器上(14")返回的是320,240.到底这个函数返回的值是怎么确定的?
pDC->SetViewportExt(pDC->GetDeviceCaps(LOGPIXELSX),函数的返回值是什么?
pDC->SetViewportExt(pDC->GetDeviceCaps(LOGPIXELSX),rn -pDC->GetDeviceCaps(LOGPIXELSY));函数的返回值是什么?
GetDeviceCaps函数计算结果不对
GetDeviceCaps(GetDC(0), HORZSIZE)取得电脑屏幕宽度是32cm,rn而我的笔记本是14寸,16:9的,46.6*0.8=37.28cmrn这中间的5.28cm跑哪里去了,求解~~
奇怪的返回值?GetDeviceCaps()
在IBM机器上用GetDeviceCaps获取显示器的颜色,调用方式GetDeviceCaps(COLORRES)65536色和16777216色,其返回值都是24,256色其返回值是18,都不正确,查看帮助:需在设备驱动程序中设置RASTERCAPS索引中的RC——PALETTE位时有效,但不知怎么设。请高手帮忙。
xPixel = GetDeviceCaps (hdc, ASPECTX) 是什么意思,求解?
如题,求大侠指点
int iBits = ::GetDeviceCaps(hDC, BITSPIXEL) * ::GetDeviceCaps(hDC, PLANES)这句话是什么
rnBITSPIXEL:像素相连颜色位数;PLANES:颜色位面数;rn单从字面上理解这两个参数 很难理解rn哪位高人 能说说 上面那句话为什么会得到该分辨率下每个像素的字节数
请教使用GetDeviceCaps获取的设备LOGPIXELSX值的意义
请教一下熟悉GDI GetDeviceCaps函数的朋友rn当参数为LOGPIXELSX时,函数返回值的实际意义rnint nSx = dc.GetDeviceCaps(LOGPIXELSX);rnrn按MSDN的解释就是每逻辑英寸的像素值。rnrn但是实际使用过程中发现,它和DC坐标映射中的映射比例有矛盾。rnrn在不同映射模式下,画一英寸的线段都是一样长的,但是在MM_TEXT模式下使用dc.GetDeviceCaps(LOGPIXELSX)画的长度不同rnrn下面是我的代码,分别用3种颜色3个方法画1英寸长的线段,结果用LOGPIXELSX来画的线段要长些rnrn[code=C/C++]rn CClientDC dc(this);rnrn CPen* pnO;rnrn dc.SetMapMode(MM_TEXT); // 每个逻辑点 1像素rn int nSx = dc.GetDeviceCaps(LOGPIXELSX); // 每英寸多少像素rn CPen pnR(PS_SOLID, 2, RGB(255, 0, 0));rn pnO = dc.SelectObject(&pnR);rn dc.MoveTo(0, 10); // 画一条1 inch长的线段rn dc.LineTo(nSx, 10); // 按理应该和后面两条等长,实际上这条要长些rn rn dc.SetMapMode(MM_LOMETRIC); // 每个逻辑点 0.1 mmrnrn CPen pnG(PS_SOLID, 2, RGB(0, 255, 0));rn dc.SelectObject(&pnG);rn dc.MoveTo(0, -10); // 画一条1 inch长的线段rn dc.LineTo(254, -10); // 1 inch = 2.54cmrnrn dc.SetMapMode(MM_LOENGLISH); // 每个逻辑点 0.01 inchrn CPen pnB(PS_SOLID, 2, RGB(0, 0, 255));rn dc.SelectObject(&pnB);rn dc.MoveTo(0, -10); // 画一条1 inch长的线段rn dc.LineTo(100, -10); // 0.01 inch ×100rnrn dc.SelectObject(pnO);rn[/code]rn
cudagetdevicecount返回值不对的问题
做一个程序,用到了cuda。该程序是首先判断用户显卡是否支持cuda,如果支持就是用gpu计算,如果不支持就使用cpu计算。我的显卡是geforce 7600 gs,并不支持cuda。但是在调试程序时,进入同事封装的dll的一函数(里面用到了cuda中的cudagetdevicecount函数),返回值居然是38. 然后程序退出时:MyApp.exe 中的 0x7c812afb 处最可能的异常: Microsoft C++ 异常: 内存位置 0x0012fbc8 处的 cudaError_enum。rnrn 网上有帖子说一般是多线程竞写一个位置或者内核程序访问了不该访问的位置或者存储器管理API出错造成的。那么请问如何定位这个错误,需要检查哪些地方呢?rnrn 我的编译环境是: VS 2005+ sp1, win xp+sp3。
《VC++技术内幕》P74页下面 pDC->SetViewportExt(pDC->GetDeviceCaps(LOGPIXELSX),-pDC->GetDeviceCaps(LOGPIXELSY));第二个参数为什么
这个参数应该是有这么多个逻辑单位,为什么是个负数哪?
GetDeviceCaps的问题
我在windows程序设计中读到以下的问题但是我有点不明白在文中说rniColors = 1 << (iPlanes * iBitsPixel) ;rn rn这个值与用NUMCOLORS参数得到的色彩数值可能一样,也可能不一样:rnrniColors = GetDeviceCaps (hdc, NUMCOLORS) ;rn我想知道什么情况下一样什么情况下不一样?????rn之后下面有讲解可是我看不太懂!!!!!rnrn<<<<>>>>>>rnrn有在某些怪异的程序中才需要知道视讯显示卡上的内存是如何组织的,但是GetDeviceCaps使程序写作者可以知道显示卡的储存组织以及它能够表示的色彩数目,下面的呼叫传回色彩平面的数目:rnrniPlanes = GetDeviceCaps (hdc, PLANES) ;rn rn下面的呼叫传回每个图素的色彩位数:rnrniBitsPixel = GetDeviceCaps (hdc, BITSPIXEL) ;rn rn大多数彩色图形显示设备使用多个色彩平面或每图素有多个色彩位的设计,但是不能同时一齐使用这两种方式;换句话说,这两个呼叫必有一个传回1。显示卡能够表示的色彩数可以用如下公式来计算:rnrniColors = 1 << (iPlanes * iBitsPixel) ;rn rn这个值与用NUMCOLORS参数得到的色彩数值可能一样,也可能不一样:rnrniColors = GetDeviceCaps (hdc, NUMCOLORS) ;rn rn我提到过,256色的显示卡使用色彩调色盘。在那种情况下,以NUMCOLORS为参数时,GetDeviceCaps传回由Windows保留的色彩数,值为20,剩余的236种颜色可以由Windows程序用调色盘管理器设定。对于High-Color和True-Color显示分辨率,带有NUMCOLORS参数的GetDeviceCaps通常传回-1,这样就无法得到需要的信息,因此应该使用前面所示的带有PLANES和BITSPIXEL值的iColors公式。rn
GetDeviceCaps
下面的两个问题是在研究VS2008自带的一个叫mdidocvw的sample时遇到,谢答!rnrn1 .如下代码段:rnrnrn CDC* pDC = GetDC();rn CPoint aspect;rn aspect.x = pDC->GetDeviceCaps(ASPECTX);rn aspect.y = pDC->GetDeviceCaps(ASPECTY);rn ReleaseDC(pDC);rn pDoc->m_ptPixel = aspect;rnrn作用是什么?rn不要告诉我去查 msdn,因为我已经查过了。ASPECTX、ASPECTY值是每一个图素的相对宽度、高度。但是我改变屏幕分辨率(如 1280*800,1280*768)之后竟然是aspect竟然不变! why?rnrnrn2. 如下代码段rnrnvoid CBounceView::OnSize(UINT nType, int cx, int cy)rnrn CView::OnSize(nType, cx, cy);rnrn CBounceDoc* pDoc = GetDocument();rn ASSERT_VALID(pDoc);rnrn LONG lScale;rn CPoint center, ptPixel;rnrn center.x = cx >> 1;rn center.y = cy >> 1;rn center.x += cx >> 3; // make the ball a little off-centerrn pDoc->m_ptCenter = center;rnrn CSize radius, move;rnrn // Because the window size has changed, re-calculatern // the ball's dimensions.rnrn ptPixel = pDoc->m_ptPixel;rnrn lScale = min((LONG)cx * ptPixel.x, // line 1rn (LONG)cy * ptPixel.y) >> 4;rnrn radius.cx = (int)(lScale / ptPixel.x); //line 2rn radius.cy = (int)(lScale / ptPixel.y);rn pDoc->m_sizeRadius = radius;rnrn //Re-calculate the ball's rate of movement.rnrn move.cx = max(1, radius.cy >> 2);rn move.cy = max(1, radius.cy >> 2);rn pDoc->m_sizeMove = move;rnrn // Redraw ball.rnrn MakeNewBall();rnrnrn请问line 1 行作用,为什么要取较小值? line 2处 这么做作用。rn thank you.
这样的返回值,不对吧?
WORD* CK810::GetAD(void)rnrn WORD result[32];rn //...rn return result;rnrnrn如果WORD result[32];改为 WORD* result = new WORD[32],就必须自己delete[]销毁?这样感觉好麻烦rn
selection.cells.count返回值不对?
我发现了。。。要是用户选择的单元格是整列,selection.cells.count 返回的值是正确的,rnrnrn要是用户选择的单元格是随意不是连续的话,selection.cells.count 返回的值就是1rnrn怎么这样呢?rnrn还有,在Word里ALT+F11切换到VBA宏编辑环境下运行宏里的代码,和我在VB里运行相同的代码效果不一样,VB里直接报错,VBA里运行通过。rnrn Dim oCell As Cell, ColArray() As Byte, RowArray() As Integerrn Dim CellsCount As Integer, N As Integer, myTable As Tablern Dim myCell As Cell, Sel As Selectionrn Dim Doc As Documentrn 'Set Doc = Documents.Item(ActiveDocument.Name)rn 'Doc.Selectrn' ActiveDocument.Selectrn rn With Selection '//----这句VB报错selection为nothingrn If .Information(wdWithInTable) Thenrn If .Type <> wdSelectionIP Thenrn CellsCount = .Cells.Countrn ReDim ColArray(CellsCount - 1)rn ReDim RowArray(CellsCount - 1)rn For Each oCell In Selection.Cellsrn ColArray(N) = oCell.ColumnIndexrn RowArray(N) = oCell.RowIndexrn N = N + 1rn Nextrn '此处可以添加遍历文档代码rn With ActiveDocumentrn Set myTable = .Tables(2)rn For N = 0 To CellsCount - 1rn Set myCell = myTable.Cell(RowArray(N), ColArray(N))rn Debug.Print .Range(myCell.Range.Start, myCell.Range.End - 1)rn Nextrn End Withrn End Ifrn End Ifrn End Withrn
返回值为什么不对呢?
这是个MD5算法,VC++ 6.0编的rn1.main函数里的w,e,r,t无法接收函数aaa()返回的值,怎么回事?rn2.请帮我解决那两个warningrn3.我不想用#define和全局变量,但是一改就报错,怎么办?rnrnrn#includern#includern#includern#include rnrn#define FF(a,b,c,d,x,s,ac) a=b+((((a+(((b)&(c))|((~b)&(d)))+x+ac))<<(s))|(((a+(((b)&(c))|((~b)&(d)))+x+ac))>>(32-(s))))rnrn#define GG(a,b,c,d,x,s,ac) a=b+((((a+(((b)&(d))|((c)&(~d)))+x+ac))<<(s))|(((a+(((b)&(d))|((c)&(~d)))+x+ac))>>(32-(s))))rn rn#define HH(a,b,c,d,x,s,ac) a=b+((((a+((b)^(c)^(d))+x+ac))<<(s))|(((a+((b)^(c)^(d))+x+ac))>>(32-(s))))rnrn#define II(a,b,c,d,x,s,ac) a=b+((((a+((c)^((b)|(~d)))+x+ac))<<(s))|(((a+((c)^((b)|(~d)))+x+ac))>>(32-(s))))rnrnrnunsigned A,B,C,D,a,b,c,d,i,flen[2],x[16]; //i临时变量,len文件长,flen[2]为64位二进制表示的文件初始长度rnchar filename[200]; //文件名rnFILE *fp;//FILE是变量类型,是C语言定义的标准数据结构,用于文件rnrnunsigned Exchange(unsigned x)//将x高低位互换,例如aabbccdd=ddccbbaarnrn return (x<<24)|((x<<8)&0xff0000)|((x>>8)&0xff00)|(x>>24);rnrnrnvoid md5()rn rnrn a=A,b=B,c=C,d=D;rnrn FF (a, b, c, d, x[ 0], 7 , 0xd76aa478); /**//* 1 */rn FF (d, a, b, c, x[ 1], 12, 0xe8c7b756); /**//* 2 */rn FF (c, d, a, b, x[ 2], 17, 0x242070db); /**//* 3 */rn FF (b, c, d, a, x[ 3], 22, 0xc1bdceee); /**//* 4 */rn FF (a, b, c, d, x[ 4], 7 , 0xf57c0faf); /**//* 5 */rn FF (d, a, b, c, x[ 5], 12, 0x4787c62a); /**//* 6 */rn FF (c, d, a, b, x[ 6], 17, 0xa8304613); /**//* 7 */rn FF (b, c, d, a, x[ 7], 22, 0xfd469501); /**//* 8 */rn FF (a, b, c, d, x[ 8], 7 , 0x698098d8); /**//* 9 */rn FF (d, a, b, c, x[ 9], 12, 0x8b44f7af); /**//* 10 */rn FF (c, d, a, b, x[10], 17, 0xffff5bb1); /**//* 11 */rn FF (b, c, d, a, x[11], 22, 0x895cd7be); /**//* 12 */rn FF (a, b, c, d, x[12], 7 , 0x6b901122); /**//* 13 */rn FF (d, a, b, c, x[13], 12, 0xfd987193); /**//* 14 */rn FF (c, d, a, b, x[14], 17, 0xa679438e); /**//* 15 */rn FF (b, c, d, a, x[15], 22, 0x49b40821); /**//* 16 */rnrn GG (a, b, c, d, x[ 1], 5, 0xf61e2562); /**//* 17 */rn GG (d, a, b, c, x[ 6], 9, 0xc040b340); /**//* 18 */rn GG (c, d, a, b, x[11], 14, 0x265e5a51); /**//* 19 */rn GG (b, c, d, a, x[ 0], 20, 0xe9b6c7aa); /**//* 20 */rn GG (a, b, c, d, x[ 5], 5, 0xd62f105d); /**//* 21 */rn GG (d, a, b, c, x[10], 9, 0x02441453); /**//* 22 */rn GG (c, d, a, b, x[15], 14, 0xd8a1e681); /**//* 23 */rn GG (b, c, d, a, x[ 4], 20, 0xe7d3fbc8); /**//* 24 */rn GG (a, b, c, d, x[ 9], 5, 0x21e1cde6); /**//* 25 */rn GG (d, a, b, c, x[14], 9, 0xc33707d6); /**//* 26 */rn GG (c, d, a, b, x[ 3], 14, 0xf4d50d87); /**//* 27 */rn GG (b, c, d, a, x[ 8], 20, 0x455a14ed); /**//* 28 */rn GG (a, b, c, d, x[13], 5, 0xa9e3e905); /**//* 29 */rn GG (d, a, b, c, x[ 2], 9, 0xfcefa3f8); /**//* 30 */rn GG (c, d, a, b, x[ 7], 14, 0x676f02d9); /**//* 31 */rn GG (b, c, d, a, x[12], 20, 0x8d2a4c8a); /**//* 32 */rnrn HH (a, b, c, d, x[ 5], 4, 0xfffa3942); /**//* 33 */rn HH (d, a, b, c, x[ 8], 11, 0x8771f681); /**//* 34 */rn HH (c, d, a, b, x[11], 16, 0x6d9d6122); /**//* 35 */rn HH (b, c, d, a, x[14], 23, 0xfde5380c); /**//* 36 */rn HH (a, b, c, d, x[ 1], 4, 0xa4beea44); /**//* 37 */rn HH (d, a, b, c, x[ 4], 11, 0x4bdecfa9); /**//* 38 */rn HH (c, d, a, b, x[ 7], 16, 0xf6bb4b60); /**//* 39 */rn HH (b, c, d, a, x[10], 23, 0xbebfbc70); /**//* 40 */rn HH (a, b, c, d, x[13], 4, 0x289b7ec6); /**//* 41 */rn HH (d, a, b, c, x[ 0], 11, 0xeaa127fa); /**//* 42 */rn HH (c, d, a, b, x[ 3], 16, 0xd4ef3085); /**//* 43 */rn HH (b, c, d, a, x[ 6], 23, 0x04881d05); /**//* 44 */rn HH (a, b, c, d, x[ 9], 4, 0xd9d4d039); /**//* 45 */rn HH (d, a, b, c, x[12], 11, 0xe6db99e5); /**//* 46 */rn HH (c, d, a, b, x[15], 16, 0x1fa27cf8); /**//* 47 */rn HH (b, c, d, a, x[ 2], 23, 0xc4ac5665); /**//* 48 */rnrn II (a, b, c, d, x[ 0], 6, 0xf4292244); /**//* 49 */rn II (d, a, b, c, x[ 7], 10, 0x432aff97); /**//* 50 */rn II (c, d, a, b, x[14], 15, 0xab9423a7); /**//* 51 */rn II (b, c, d, a, x[ 5], 21, 0xfc93a039); /**//* 52 */rn II (a, b, c, d, x[12], 6, 0x655b59c3); /**//* 53 */rn II (d, a, b, c, x[ 3], 10, 0x8f0ccc92); /**//* 54 */rn II (c, d, a, b, x[10], 15, 0xffeff47d); /**//* 55 */rn II (b, c, d, a, x[ 1], 21, 0x85845dd1); /**//* 56 */rn II (a, b, c, d, x[ 8], 6, 0x6fa87e4f); /**//* 57 */rn II (d, a, b, c, x[15], 10, 0xfe2ce6e0); /**//* 58 */rn II (c, d, a, b, x[ 6], 15, 0xa3014314); /**//* 59 */rn II (b, c, d, a, x[13], 21, 0x4e0811a1); /**//* 60 */rn II (a, b, c, d, x[ 4], 6, 0xf7537e82); /**//* 61 */rn II (d, a, b, c, x[11], 10, 0xbd3af235); /**//* 62 */rn II (c, d, a, b, x[ 2], 15, 0x2ad7d2bb); /**//* 63 */rn II (b, c, d, a, x[ 9], 21, 0xeb86d391); /**//* 64 */rn rn A += a;rn B += b;rn C += c;rn D += d;rnrnrnrnunsigned aaa()rnrn unsigned f=0,g=0,h=0,j=0;rnrn while(1)rn rn cout<<"请输入TXT文档所在路径:"<55) rn md5(),memset(x,0,64);rn memcpy(x+14,flen,8); //文件末尾加入原文件的bit长度rn md5();rn fclose(fp); rnrn f=Exchange(A);rn g=Exchange(B);rn h=Exchange(C);rn j=Exchange(D);rnrn cout<<"MD5 Code:"<
Sizeof 的返回值不对?
如下的结构:rnrn Ttest = Recordrn a: LongInt; //4rn b: Byte; //1rn c: Boolean; //1 rn d: Boolean; //1rn e: Boolean; //1rnrn f: Double; //8rn g: Word; //2rn h: Word; //2rn i: Word; //2rn j: Word; //2rn k: LongInt; //4rn l: Double; //8rn end;rnrnSizeof(TTest) = 40;rn但我用手工算来算去,都只有36, 为什么?rnWord ----- 2 Byte;rnBoolean ---- 1 ByternLongInt ---- 4 ByternDouble ----- 8 Byternrn谢谢!rnrn
mybatis批量更新 返回值不对
mybatis批量更新返回都是-1,怎么知道其中那些更新成功还是失败。
GetDeviceCaps函数的问题
在GetDeviceCaps函数中使用ASPECTX,ASPECTY参数的时候,MSND里面说获取的是用于画线的设备像素的相对宽度和高度,这里面的相对宽度和相对高度该怎么解释,是相对什么来说的?
delphi7 MessageDlg返回值不对
调用 MessageDlg,的时候选YES按钮返回值是3,而不是帮助文档里面所说的6,这是为什么呢?
树节点返回值不对
[code=C#]rn public MainForm()rn rn InitializeComponent();rnrn //初始化树rn NodeRoot = tree.Nodes.Add("aa");rn Node1 = NodeRoot .Nodes.Add("bb");rn Node2 = NodeRoot .Nodes.Add("cc");rn tree.ExpandAll();rn rn[/code]rnrn可以得到NodeRoot Node1 Node2的boundsrnrn接下来通过一个外部事件触发添加树节点rn[code=C#]rn TreeNode Node11;rn //插入节点rn Node11 = Node1.Nodes.Add(str); rn[/code]rn得到的bounds是全0rn但是这么写是得到正确的rn[code=C#]rn TreeNode Node11;rn //插入节点rn Node11 = tree.Nodes.Add(str); rn[/code]rnrn请问这是为什么啊?该怎么获得树节点的bounds呢?难道是在生成树后循环找到那个树节点,才可以获得?但为什么通过构造函数初始化的树节点却能正确获得呢?rn
PopupWindow.getWidth()返回值一直不对
我想获取PopupWindow的宽度,但是返回值一直为-2rn代码如下rnView view = View.inflate(this, R.layout.popwindow, null);rn//这一句是百度的,加不加都一样rn//view.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);rnPopupWindow pop = new PopupWindow(view, LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT, true);rnpop.setBackgroundDrawable(new ColorDrawable(0x00000000));rnpop.setOutsideTouchable(true);rnLog.v("x", "width = " pop.getWidth());
ftell()返回值不对啊!!
FILE *fpidx=fopen("rivers.idx","rb");rn if (fpidx==NULL)rn rn MessageBox("发生异常"); rn rn fseek(fpidx,0,SEEK_END);rn int z=ftell(fpidx);rn这是我的代码片段,中间加断点看z的值为636,可我rivers.idx这个文件的属性却是6.89k,这差点也太多了吧,引用文件的地址无误,求各位高手解答..不知道该怎么办了
CSpinButtonCtrl::GetPos返回值不对
在视图类的ONCreate中rnm_spin.Create(WS_CHILD|WS_VISIBLE|UDS_ARROWKEYS|UDS_ALIGNRIGHT|UDS_WRAP,CRect(0,0,0,0),this,2);rnm_spin.SetBuddy(&m_edit);rnm_spin.SetRange(100,1);rnm_spin.SetPos(10);rnrn然后在Onlbuttondown中:rn CString str;;rn str.Format("%d",m_spin.GetPos());rn MessageBox(str);rn发现m_spin.GetPos的值为65536,根本不对,但是如果在创建时指定UDS_SETBUDDYINT样式,那么一切正常,rn这是问什么呢???????????????rnrn
有关GetDeviceCaps问题!
int cxPage = pDC->GetDeviceCaps(HORZRES);// 获取打印页面的水平宽度(象素)rnint cyPage = pDC->GetDeviceCaps(VERTRES);// 获取打印页面的垂直高度(象素)rnint cxInch = pDC->GetDeviceCaps(LOGPIXELSX);// 获取打印机每英寸象素数rnint cyInch = pDC->GetDeviceCaps(LOGPIXELSY);rn我在ondraw函数中有上述这些语句,但结果是cxPage=4800,cyPage =6675,cxInch=600,cyInch =600,这是怎么回事:打印页面的水平宽度有4800象素吗?打印页面的垂直高度则怎么会有6675象素呢?打印机每英寸象素数怎么会有600呢?我用的是A4纸,请指点!谢谢!rn
用GetDeviceCaps获取信息的问题
1.用以下方法获取的打印机页边距的单位是什么呀,能不能转换成毫米或象素?rnMargin.x :=GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX);rnMargin.y :=GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);rn2.怎样去掉打印机的默认页边距?(我用的打印机是EPSON LQ 1600KIII)
GetDeviceCaps的使用
int GetDeviceCaps(rn HDC hdc, // handle to DCrn int nIndex // index of capabilityrn);rn 这是GetDeviceCaps的声明,需要两个参数吧???可是为什么我在一个程序里面看到只要一个参数就可以了呢??即:rnint BitPerPixel = pDC->GetDeviceCaps(BITSPIXEL);//获得颜色模式rn而且我对这个程序运行过了,完全正确的,我觉得这个函数不可能有缺省值啊,如果有缺省的话当调用的时候也应该是指定HDC hdc而不是int nIndex啊,因为函数的缺省值肯定是从右边开始的吧 ????请问这是怎么一回事啊????(明确说明,我的这个程序能正常运行)
hdc问题
代码如下:rn [code=C/C++] HBITMAP hStaBitmap = LoadBitmap(m_hInstance, MAKEINTRESOURCE(IDB_PLAYBOTTOMSTATIC));rn HDC hdc1 = GetDC(NULL);rn HDC g_hStaticDC = CreateCompatibleDC(hdc1);rn SelectObject(g_hStaticDC, hStaBitmap);rn ReleaseDC(NULL, hdc1);rnrn HDC hdc2 = GetDC(NULL);rn HDC g_hStaticDC2 = CreateCompatibleDC(hdc2);rn HBITMAP hMenBitmap2 = CreateCompatibleBitmap(hdc2, 320, 91);rn SelectObject(g_hStaticDC2, hMenBitmap2);rn ReleaseDC(hWnd, hdc2);rnrn BLENDFUNCTION bf;rn bf.AlphaFormat=0;rn bf.BlendFlags=0;rn bf.BlendOp=AC_SRC_OVER;rn bf.SourceConstantAlpha=155;//透明度0-255rn AlphaBlend(g_hStaticDC2,0,0,320,91,g_hStaticDC,0,0,320,91,bf);rnrn CPStaticSetBkDC(m_Bottom, g_hStaticDC2);//设置控件背景函数[/code]大家帮忙看看,控件背景hdc设置的对不对?哪儿错了?实际运行时没有背景图片产生,不知为什么?
关于GetDeviceCaps
int nXmillimeter = pDC-> GetDeviceCaps(HORZSIZE); rnint nYmillimeter = pDC-> GetDeviceCaps(VERTSIZE); rn在MM_TEXT模式下所得到的是长宽上每毫米有多少像素吗? rnMSDN上的解释说是设备信息,但没看到具体说法. rn我实际操作过程中发现nXmillimeter,nYmillimeter改变显示器分辨率时始终为320和240.rn
HDC的问题
hdc mdc = CreateCompatibleDC(hdc);rn这个mdc是个全局变量,请问它不需要Release掉吗?rn初学这个SDK,GDI,读了一个小程序,发现这个dc没有Delete或者release,rn是作者忘了还是这种兼容dc不需要删掉?
hdc 问题
BITMAP bmpInfo;rn HBITMAP hBitmap;rn hBitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(), L"e:\\1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);rn ::GetObject(hBitmap , sizeof(BITMAP) , (LPBYTE)&bmpInfo);rn RECT rc, rw;rn ::GetClientRect(this->m_hWnd, &rc);rn ::GetWindowRect(this->m_hWnd, &rw);rn HDC hDC = ::GetDC(this->m_hWnd);rn HDC dcCompatible = ::CreateCompatibleDC(hDC);rn ::SelectObject(dcCompatible, hBitmap);rn ::SetBkMode(dcCompatible,TRANSPARENT);rn HBITMAP temp_bmp;rn HDC temp_hdc = ::CreateCompatibleDC(hDC);// ::GetDC(NULL); rn ::SetDIBColorTable(temp_hdc, 0, uNumEntries, &prgb);rn rnrn temp_bmp = ::CreateCompatibleBitmap(temp_hdc, bmpInfo.bmWidth, bmpInfo.bmHeight); //创建兼容位图rn ::SelectObject(temp_hdc , temp_bmp);rnrn ::StretchBlt(temp_hdc, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, dcCompatible, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, SRCCOPY);rn //::BitBlt(temp_hdc, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, dcCompatible, 0, 0, SRCCOPY);rn ::BitBlt(hDC, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, temp_hdc, 0, 0, SRCCOPY);rnrn想请教下为什么把从磁盘读取的BMP图片放到temp_hdc 后在显示在窗口中变成了黑白的?只知道需要设置,但不知道用什么API怎么去设置temp_hdc ,谁能指点下。
HDC问题
CBrush brushBlue(RGB(0, 0, 255));rnCBrush* pOldBrush = pDC->SelectObject(&brushGreen);rnpDC->SelectObject(&brushBlue);rnpDC->Rectangle(rect);rnpDC->SelectObject(pOldBrush);rnpDC->Rectangle(rect2);rn我在视图ONDRAW中写如上代码rn划的两个矩形,都被填了绿色是怎么回事
指针的问题,返回值不对,谢谢指教!
题目是n个人围成一圈,顺序排号.从第一个人开始报数(从1到3),报到2的人退出圈子,问最后留下来的是几号那位.本人愚钝again,查不出哪里出错,请帮帮我这个当局者.rn#include "stdio.h"rnint out_circle(int *array,int n)rnrn int i,*p,j,k;rn for(i=0,j=0,p=array;k
HDC hdc=GetDC();
HDC hdc=GetDC();rn为什么要啊?不可以直接LinTo画线吗?rn
:CreateCompatibleDC(hDC);//根据一个HDC生成 HDC
不明白 生成HDC 与 被使用的HDC啥关系rn
Qt中findChildren返回值不对
今天在调试程序中发现findChildren函数返回值和模版参数不匹配. 函数调用的本身和库都没有错误.最后发现是我在继承了QObject的过程中没有使用Q_OBJECT宏. 使用了该宏.Qt的元对象编译器才会初始化类的className. findChildren是通过className来便利到需要返回的内容. QObject和QWidget类提供的很多函数都需要元对象编译器提供
localtime_r 返回值不对,请求解救
代码如下:rnstruct tm pkt_time = 0;rnstatic char ts[MAX_TIME_LEN];rn time_t timep = 1439460264; rnlocaltime_r(&timep , &pkt_time);// 这个函数貌似有些问题rnstrftime(ts, MAX_TIME_LEN, "%Y-%m-%d %H:%M:%S", &pkt_time);rnrnprintf("%d %d %d %d %d %d\n ", pkt_time.tm_sec, pkt_time.tm_min, pkt_time.tm_hour, pkt_time.tm_mday, pkt_time.tm_mon, pkt_time.tm_year);rn rnprintf("---- ts %u %s\n", pack->time_, ts);rnrn程序运行后,打印出来的是:rn38 13 9 0 0 493407503rn ---- ts 1439462109 493409403-01-00 09:13:38rnrn明显不对啊, 求解救难道 是多线程引起的, 貌似 说 localtime_r 是线程安全的啊
为何CheckMenuItem返回值不对呢??
请问为何:rnUINT tnRet = pViewMethodMenu->CheckMenuItem(ID_VIEW_ICON,MF_BYCOMMAND|MF_CHECKED);rn if(tnRet == MF_UNCHECKED)rn ...rnrn返回值是MF_UNCHECKED呢?
hdc和hDC区别?
一个很简单的win32程序!rn在写WM_LBUTTONDOWN消息的时候我定义了DC的句柄:HDC hdc;没有任何问题,程序正常运行!rn可是我在写WM_PAINT消息 定义一个DC句柄(HDC hdc)的时候,VC报错!然后我将这个定义改为HDC hDC后,程序正常运行!?rn这是为什么?rnHDC hdc 和HDC hDC两者之间的区别在哪?
GetDeviceCaps函数HORZSIZE的值得问题
使用GetDeviceCaps函数,我想通过将第二个参数选为HORZSIZE和VERTSIZE,得到了结果为306和230。我想请问大家这两个值是怎么算出来的?rnrn我的显示器分辨率为1024*768,DPI是96,17寸显示器。我用尺子量了量,长应该是320mm,宽为240mm,那么这个函数得到结果是怎么算出来的啊??是逻辑长度么rnrn[img=http://hiphotos.baidu.com/zhidao/pic/item/79f0f736545d7f160a55a9a2.jpg][/img]
HDC
请问HDC是用来干什么的?具体一点,谢谢~~~
关于HDC hDc = GetDC(0);的问题
#include rn#pragma hdrstoprnrn#include "Unit1.h"rn//---------------------------------------------------------------------------rn#pragma package(smart_init)rn#pragma resource "*.dfm"rnTForm1 *Form1;rnCOLORREF rgb;rnTPoint CurPos(0,0);rn//----------------------rnvoid __fastcall TForm1::Timer1Timer(TObject *Sender)rnrnGetCursorPos(&CurPos);rnHDC hDc = GetDC(0);rnrgb = GetPixel(hDc,45,55);//这个点在屏幕上的颜色总是在变化rnEdit1->Color = TColor(rgb);//使Edit1->Color等于(45,55)这个点的颜色 rnrnTimer的定时为200,运行后内存越来越少,后将HDC hDc = GetDC(0);移出,改为rn#include rn#pragma hdrstoprnrn#include "Unit1.h"rn//---------------------------------------------------------------------------rn#pragma package(smart_init)rn#pragma resource "*.dfm"rnTForm1 *Form1;rnTPoint CurPos(0,0);rnCOLORREF rgb;rnHDC hDc = GetDC(0);rn//----------------------rnvoid __fastcall TForm1::Timer1Timer(TObject *Sender)rnrnrnGetCursorPos(&CurPos);rnrgb = GetPixel(hDc,45,55);//这个点在屏幕上的颜色总是在变化rnEdit1->Color = TColor(rgb);//使Edit1->Color等于(45,55)这个点的颜色 rnrn内存不减少了,但一拖动任意程序的窗口或用鼠标拖动改变任意程序的大小,Edit1->Color 就变成黑色了,不在随Timer动作了,为什么?怎么办?rnHDC hDc = GetDC(0);这句怎么解释?rnrnrnrn
相关热词 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法 c# gmail 发邮件 c# 多层文件