我有一個表單帶滾動條的如圖

有一個控制元件表格在表單2 里面,表單二有滾動條。可以上下拖動,這個控制元件類的名字叫Grid我可以通過
auto s=CRect();
Grid->GetWindowRect(&s);
Grid->GetParent()->ScreeToClient(&s)
pDC->DPtoLp(&s);
得到他在螢屏上的坐標,但是問題來了。。。他在表單二的邏輯坐標 怎么得出來, 特別是當我通過4或者5拉動改變表單2的大小,這個物件S的是該表的,不過這樣子不對啊。我里面的控制元件的相對于父視窗的邏輯坐標位置沒變啊 只是改變了表單的大小,我里面控制元件的位置沒變啊,如果 在用Grid->GetWindowRect(&s);這個得出來的坐標就跟沒改變視窗大小的時候不一樣了,確實也應該不一樣,不過我控制元件相對于父視窗沒改變位置啊。
uj5u.com熱心網友回復:
x坐標減去水平滾動條的posuj5u.com熱心網友回復:
您好,請問一下水平滾動條是指我表單2的嗎,,,還是只我表單二父視窗的水平滾動條,可是我視窗二的父視窗沒有滾動條啊 只是拖拉兩個表單1和二的邊界大小uj5u.com熱心網友回復:
auto s=CRect();Grid->GetWindowRect(&s);
Grid->GetParent()->ScreeToClient(&s); //這里已經是控制元件在其父視窗中的客戶區坐標
uj5u.com熱心網友回復:
后來我想想確實也是。。。不過我在4 那里拖動改變視窗1和2大小的時候,視窗1中的縮略圖,可以看到視窗2 中的東西 只有拖動到某個位置的時候才能正確的看到這個表格縮略圖,如果視窗1比較小的時候。那個縮略圖 直接顯示別的東西您看下,下面兩個圖

uj5u.com熱心網友回復:
這個讓我很費解 我坐標設的就是那個控制元件在表單的坐標啊
pDC->StretchBlt(sourcePos.left, sourcePos.top,
(sourcePos.Width()), (sourcePos.Height()),
Grid->GetWindowDC(),
0, 0,
griddevicerect.Width(), griddevicerect.Height(),
SRCCOPY);//Grid 是那個控制元件類,GetWindowDC 換成GetDC()也一樣
只有將視窗2拖動到某個位置的時候才能正確顯示 ,想不通 拜托大佬 給點提示
uj5u.com熱心網友回復:
是否對引數的意思理解有誤?pDC->StretchBlt( 0, 0, //目標DC的起始位置x,y
dstWidth, dstHeight, //目標DC的大小cx,cy
pSrcDC, //源DC
0, 0, //源DC起始位置
srcWidth, srcHeight, //源DC大小 cx,cy
SRCCOPY);
uj5u.com熱心網友回復:
你用絕對坐標的話坐標值肯定變了吧,你應該使用相對坐標,比如控制元件的x在父視窗寬度的1/3位置,控制元件的寬度是父視窗寬度的1/2等等,每次父視窗大小變化后,你重新獲取一下父視窗的寬度、高度,再移動控制元件就行了uj5u.com熱心網友回復:
引數確實弄錯了。。。本來代碼是
auto sourcePos=CRect();
Grid->GetWindowRect(&sourcePos);
Grid->GetParent()->ScreeToClient(&sourcePos)
auto griddevicerect=CRect();
Grid->Grid->GetWindowRect(&griddevicerect);
pDC->DPtoLp(&s);
pDC->StretchBlt(0,0,
sourcePos.Width(),sourcePos.Height() ,
pGrid->GetWindowDC(),
0, 0,
griddevicerect.Width(), griddevicerect.Height(),
SRCCOPY);
這個樣子
版主大大說的對。。但我真的不知道怎么調這個坐標。。。調了好長時間了 快崩潰了。
改了一下代碼:
//代碼1
auto sourcePos=CRect();
Grid->GetWindowRect(&sourcePos);//這個應該是所在整個視窗的坐標
auto griddevice=sourcePos;
Grid->GetParent()->ScreeToClient(&sourcePos)//然后把這個坐標轉換成視窗2的坐標
pDC->DPtoLp(&sourcePos);然后再次轉換成在視窗2 所在的邏輯坐標
pDC->StretchBlt(sourcePos.left,sourcePos.top,
sourcePos.width(),sourcePos.Height(),
0,0,griddevice.width(),griddevice.Height();
SRCCOPY);
以上代碼可以完美的這個縮略圖顯示在我的控制元件下方,
不過就是改變視窗的時候導航欄看到的縮略圖不一樣,還有我今天發現我的另一個問題是,如果我在父視窗二上面在拖一個用pDC畫好的橢圓,并且改變的橢圓的位置,我那個表格控制元件在導航欄的大小還是會發生變化。看下面兩個圖


這個樣到底怎么回事呢。。。
uj5u.com熱心網友回復:
老哥看一下樓上。。這個我沒有改變視窗2的大小,只是拖一個用pdc畫了一個原,那個左側導航欄的表格圖就變了。。。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/15235.html
標籤:界面
