今天在将一个位图加载到对话框中的一个picture控件时,调用StretchBlt函数绘制时,发现位图加载错位了(位图左上角粘在对话框左上角),查找原因,原来在函数StretchBlt的第1和第2个参数传值错误,这两个参数我是由调用GetClientRect函数获取的,错误就在这.
原因是函数GetClientRect只是获取控件的客户区域大小,而控件的位置是不包括在这里面的,假设调用GetClientRect(ClientRC),ClientRC.left=ClentRC.top=0,所以调用StretchBlt后出现位图粘在对话框左上角.
要正确的加载,需从GetWindowRect函数获取,该函数是获取控件的位置(left,top,right,bottom),注这是屏幕坐标,还需调用ScreenToClient将屏幕坐标转化为客户区坐标.假设调用GetWindowRect(&rc),StretchBlt的第1和第2参数正确传值应该是rc.left,rc.top.最后验证位图加载位置正确.
这是个很简单的错误,主要是对函数不熟,各位不要笑话,在这写博客主要是为自己做个笔记和提醒.