|
Hi stuart,
Yes the value of baseSize_t looks like ok..
below I am providing the value of that variable: -
top = 29,bottom=716,left=3,right=810.
i haven't set any value to offset_t variable.
what should i do..?
Thanks in advance...
Thanks
Venkatesh.
|
|
|
|
|
That'll be the problem. Set offset_.x to 0, offset_.y to the scroll bar position - you called it m_nScrollPos . I'd recommend using and updating offset_.y rather than m_nScrollPos , although you could just put thi in your OnPaint :
CPoint offset_(0, m_nScrollPos);
|
|
|
|
|
Hi Stuart,
I just did this and ran my app, but still no progress. I am facing with the same problem. When i scroll down, the image is getting erasing.
Can you please tell where i am going wrong..? Or Give me your email id, i will mail you my exe file, so that you can understand my problem easily... Please kindly help me in this because it is very urgent requirement for me..
Thanks in advance...
Thanks
Venkatesh.
|
|
|
|
|
Seems to me you're not setting offset_ correctly. That's the problem you've had from the start - offsetting the images correctly.
I'll post my files tomorrow when I'm at work - that's where they are, not here at home.
|
|
|
|
|
OK - as I promised, here's my code (or at least the relevant bits of it).
Here's the relevant bits of the dialog class declaration:
class CaaaDlg : public CDialog
{
public:
protected:
private:
void OnResized();
CImage image1_;
CImage image2_;
CRect baseSize_;
CPoint offset_;
};
And the relevant (bits of) the method implementations:
CaaaDlg::CaaaDlg(CWnd* pParent )
: CDialog(CaaaDlg::IDD, pParent),
offset_(0, 0)
{
image1_.Load(path to image 1);
image2_.Load(path to image 1);
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CaaaDlg::OnPaint()
{
if (IsIconic())
{
}
else
{
PAINTSTRUCT ps;
CDC* paintDC = BeginPaint(&ps);
CRect rcImage1(baseSize_);
rcImage1.bottom /= 2;
CRect rcImage2;
rcImage2.SubtractRect(baseSize_, rcImage1);
rcImage1.OffsetRect(-offset_);
rcImage2.OffsetRect(-offset_);
image1_.StretchBlt(*paintDC, rcImage1, SRCCOPY);
image2_.StretchBlt(*paintDC, rcImage2, SRCCOPY);
EndPaint(&ps);
}
}
void CaaaDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
SCROLLINFO si = { sizeof(si), 0 };
GetScrollInfo(SB_VERT, &si, SIF_ALL);
CPoint newOffset(offset_);
switch (nSBCode)
{
case SB_LINEDOWN:
newOffset.y += si.nPage / 10;
break;
case SB_LINEUP:
newOffset.y -= si.nPage / 10;
break;
case SB_PAGEDOWN:
newOffset.y += si.nPage;
break;
case SB_THUMBTRACK:
case SB_THUMBPOSITION:
newOffset.y = nPos;
break;
case SB_PAGEUP:
newOffset.y -= si.nPage;
break;
default:
return;
}
CRect currSize;
GetClientRect(&currSize);
const int maxOffset = baseSize_.Height() - currSize.Height();
newOffset.y = max(min(newOffset.y, maxOffset), 0);
SetScrollPos(SB_VERT,newOffset.y,TRUE);
ScrollWindow(0,offset_.y-newOffset.y);
offset_ = newOffset;
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}
void CaaaDlg::OnResized()
{
CRect currSize;
GetClientRect(&currSize);
SCROLLINFO si;
si.cbSize = sizeof(SCROLLINFO);
si.fMask = SIF_DISABLENOSCROLL|SIF_ALL;
si.nMin = 0;
si.nMax = baseSize_.Height()-1;
si.nPage = currSize.Height();
CPoint oldOffset(offset_);
if(offset_.y + si.nPage > baseSize_.Height()) offset_.y = baseSize_.Height() - si.nPage;
if(offset_.y < 0) offset_.y = 0;
si.nTrackPos = si.nPos = offset_.y;
SetScrollInfo(SB_VERT, &si, TRUE);
if (oldOffset != offset_)
{
SetScrollPos(SB_VERT,offset_.y,TRUE);
ScrollWindow(0,oldOffset.y-offset_.y);
}
}
|
|
|
|
|
Hi Stuart,
Your code snippet answered my question, ... what a brillant coding...
Thank you very much for helping me regarding this..
I am very happy now.. thanks a lot for your help and your patience...
You are Rock
Thanks
Venkatesh.
|
|
|
|
|
Hi Stuart,
With the help of your example code, i am able to draw 10 images on dialog box, now what i want is i am not able to identify the pixels for creating checkboxes.
i want one check box for each image...
Can you please tell me how i have to proceed for creating check box....
please help me regarding this case also....
Thanks
Venkatesh.
|
|
|
|
|
CreateWindow with a class of BUTTON and window style including BS_CHECKBOX , one for each image.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Hi Stuart,
I am creating the check box dynamically using below code snippet,
CButton *check_box; // I have delared the variable in header file
////In OnPaint function i am writing below code
check_box = new CButton;
check_box->Create("Venkatesh",WS_CHILD | WS_VISIBLE|BS_AUTOCHECKBOX|BS_LEFTTEXT,
CRect(rcImage2.left,rcImage2.top,rcImage2.right,rcImage2.bottom),this,0x11);
I want to know how to specify the rectange parameters in this function..
Please let me know, so that i will go ahead...
Thanks
Venkatesh.
|
|
|
|
|
venki502 wrote: I want to know how to specify the rectange parameters in this function..
The values for the rectangle? Damn, I don't know - depends where you want to put it.
All I know is that you don't need to offset them by the scroll position like you did with the images.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Hi Stuart,
Yes, i did that, i have given below rectangle pixels at the time of creation. CRect(277,175,365,200).
I want to create check box in that location, but initially i am able to get that on my dialog, next when i scroll down it is getting erasing..
The same problem, earlier i have faced with the images.
today i have tried to set the pixels just like what we did for the images. but its' not working..
Can you please suggest me the right way to do this..?
Thanks in advance...
Thanks
Venkatesh
|
|
|
|
|
Hmmm - this worked fine for me:
- Create the check boxes in
OnInitDialog :
CRect rcCheck1(baseSize_);
rcCheck1.bottom /= 2;
CRect rcCheck2;
rcCheck2.SubtractRect(baseSize_, rcCheck1);
rcCheck1.left = rcCheck1.right - 100;
rcCheck2.left = rcCheck2.right - 100;
check1_.Create(_T("1"), WS_CHILD|WS_VISIBLE|BS_CHECKBOX, rcCheck1, this, 101);
check2_.Create(_T("2"), WS_CHILD|WS_VISIBLE|BS_CHECKBOX, rcCheck2, this, 102);
- Draw the images 100 pixels narrower (as I've made the checkboxes 100 pixels wide). I added the following two lines in
OnPaint right before the OffsetRect method calls to do that:
rcImage1.right -=100;
rcImage2.right -=100;
Oh, and check1_ and check2_ are members of the dialog class, of type CButton .
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Hi Stuart,
Thanks for valuable information on this.... I have tried the same thing in my application, it is working fine.
With the help your example code i have created one slider bar, and using MCI functions i trying to play the call. I am able to play the call, but the slider bar is not moving.
Can you please let me know why i am not able to get that..
Please help me regarding this also..
Thanks in advance..
Thanks
Venkatesh.
|
|
|
|
|
Never used MCI, got no idea, sorry.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Hi Stuart,
I need one more small help regarding line creation on images. I am able to get images and check boxes on dialog box. Now i want to create one horizontal line on images. I have tried with the same logic which i have used for images and check boxes.
But if i moved vertical scroll bar down, then the line is also moving and getting erasing..
Can you please help me out in this regards, because this is last component of my application.
Thanks in advance..
Thanks
Venkatesh.
|
|
|
|
|
venki502 wrote: one horizontal line on images
How you doing that?
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Hi Stuart,
In OnInitDialog function i have written following code snippet..
CRect rcLine1(baseSize_);
rcLine1.bottom /= 2;
rcLine1.SubtractRect(baseSize_, rcLine1);
x1 = rcLine1.left + 15;
y1 = x1;
x2 = rcLine1.top - 700;
y2 = rcLine1.bottom - 1300;
Thanks
Venkatesh
|
|
|
|
|
How are you drawing the line - with MoveTo +LineTo in your OnPaint handler?
If that's the case, you need to offset it with the scroll position, like when you blitted the images.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Hi Stuart,
I using MoveTo and LineTo functions in OnPaint only... i have written remaining code in OnInitDialog. becuase i want to move the line across the images.
but still i am getting same problem..
Any clue regarding this..?
Thanks
Venkatesh.
|
|
|
|
|
As I said, you need to offset the endpoints of the line exactly the same as you offset the rectangles into which you blitted the images.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Hi Stuart,
I am using below code snippet in OnPaint method..
CRect rcLine1(baseSize_);
rcLine1.bottom /= 2;
rcLine1.SubtractRect(baseSize_, rcLine1);
rcLine1.OffsetRect(-offset_);
rcLine1.left += 15;
rcLine1.right = rcLine1.left;
rcLine1.top -= 700;
rcLine1.bottom -= 1300;
but still i am facing same problem...? kindly please look into this once..
Thanks
Venkatesh.
|
|
|
|
|
But you've not said what co-ordinates you're drawing the line with.
Or where you're trying to draw the line.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Hi Stuart,
I am using below code snippet in OnPaint method..
CRect rcLine1(baseSize_);
rcLine1.bottom /= 2;
rcLine1.SubtractRect(baseSize_, rcLine1);
rcLine1.OffsetRect(-offset_);
rcLine1.left += 15;
rcLine1.right = rcLine1.left;
rcLine1.top -= 700;
rcLine1.bottom -= 1300;
dc.MoveTo(rcLine1.left,rcLine1.right);
dc.LineTo(rcLine1.top,rcLine1.bottom);
this is how i am trying to draw the line..
still i am facing same problem...?
Thanks
Venkatesh
|
|
|
|
|
Your co-ordinate use looks messed up.
You've got MoveTo(left, right); followed by LineTo(top, bottom); . That just doesn't seem right.
I added a horizontal line between two images with
dc.MoveTo(rcImage1.left+15, rcImage1.bottom);
dc.MoveTo(rcImage1.right-15, rcImage1.bottom);
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Hi Stuart,
Thanks for your help, I am able to draw veritcal line successfully across the images, we have given static pixels information for drawing a line right..? but now i want to move line across the images whenever i have clicked on button..
Can you please tell me how can i achive this..?
Thanks
Venkatesh.
|
|
|
|
|