|
Hi. I have been reading articles, messages and anything I can find but I still
cannot get a DIBSection to work. Can anyone tell me what I am doing wrong or point
me to an article that explains how to use one.
This code as written works,it paints the window red. But when I use the two commented lines instead of CreateCompatibleBitmap I get nothing. The handle returned by CreateDIBSection seems wrong, when I hover the mouse over it debug says it is unused.
Any help at all would be great. Thanks in advance.
void CChildView::OnDibtstTest(){
CRect r;
GetClientRect(&r);
BITMAPINFO *pbmInfo = new BITMAPINFO;
memset(pbmInfo,0,sizeof(BITMAPINFO));
pbmInfo->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
pbmInfo->bmiHeader.biWidth=r.right;
pbmInfo->bmiHeader.biHeight=r.bottom;
pbmInfo->bmiHeader.biPlanes=1;
pbmInfo->bmiHeader.biBitCount=32;
pbmInfo->bmiHeader.biSizeImage=r.right*r.bottom*4;
void *pImg;
CDC *pDc=GetDC();
CDC *pmDc = new CDC;
pmDc->CreateCompatibleDC(pDc);
CBitmap *pcBm = new CBitmap;
// HBITMAP hBm = CreateDIBSection(pDc->m_hDC,pbmInfo,DIB_RGB_COLORS,&pImg,NULL,0);
// pcBm->FromHandle(hBm);
pcBm->CreateCompatibleBitmap(pDc,r.right,r.bottom);
pmDc->SelectObject(pcBm);
CBrush br(RGB(255,0,0));
pmDc->SelectObject(&br);
pmDc->Rectangle(0,0,r.right,r.bottom);
pDc->BitBlt(0,0,r.right,r.bottom,pmDc,0,0,SRCCOPY);
delete pbmInfo;
delete pmDc;
delete pcBm;
}
|
|
|
|
|
Kaaib wrote: // pcBm->FromHandle(hBm);
i believe this does not do what you think it does. Try with
pcBm->Attach(hBm);
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> //TODO: Implement signature here<
|
|
|
|
|
Code-o-mat wrote: > //TODO: Implement signature here<
i love this TODO
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow Never mind - my own stupidity is the source of every "problem" - Mixture
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
Support CRY- Child Relief and You
|
|
|
|
|
//TODO: Implement thanks here...
thanks i guess...
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> //TODO: Implement signature here<
|
|
|
|
|
Thank you very much code-o-mat! That did the trick.
Can you tell me why FromeHandle does not work?
|
|
|
|
|
FromHandle returns the CBitmap object that has already been attached to the bitmap handle, if no such CBitmap object exists, it creates a temporary one and returns a pointer to that one. It will not attach your object to the handle. FromHandle is actually a static method.
CBitmap *bmp = new CBitmap;
bmp->FromHandle(hbmp);
is the same as
CBitmap::FromHandle(hbmp);
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> //TODO: Implement signature here<
|
|
|
|
|
Now here is a class
class CPipeLineApp: public CWinApp
{
public:
CDengLu* dgDlg;
.......
}
I want to set dgDlg as a extern variable so that I can call dgDlg in class CMainFrame .
dgDlg has variables :name and pass .
I want to call them too.
Please lend me a hand.
modified on Wednesday, March 16, 2011 8:43 PM
|
|
|
|
|
Jokcy wrote: I want to set dgDlg as a extern variable so that I can call dgDlg in class CMainFrame .
As it is, dgDlg can be accessed from any CMainFrame method.
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Some people are making such thorough preparation for rainy days that they aren't enjoying today's sunshine." - William Feather
|
|
|
|
|
|
I'm awfully sorry.I've made a mistake.The question has been modified.Please help me.
|
|
|
|
|
As far as I understand your question, you can access it like below.
((CPipeLineApp*)AfxGetApp())->dgDlg;
|
|
|
|
|
ozer's right... my 5! [i forgot you can rate these!]
|
|
|
|
|
Thanks.
Time is never on our side! -- Albert Holguin
|
|
|
|
|
interesting quote... sounds familiar...
|
|
|
|
|
But, I couldn't find out how I could save it as default in my settings. Do you know how?
|
|
|
|
|
Have no idea! ...i've only recently become an active participant in this forum...
|
|
|
|
|
?I think it will save auto automatically.When close the work space ,it'll warn you.
|
|
|
|
|
Thank you for you method! I've got it.
|
|
|
|
|
don't forget to vote his answer up as good! ...i just had someone come around and downvote some of my posts
|
|
|
|
|
You don't have to set that as an extern , its public and part of CMainFrame... means you should be able to reach it from any CMainFrame... what are you trying to do?
|
|
|
|
|
I'am so sorry .I've made a serious mistake.
class CPipeLineApp : public CWinApp
{
public:
CDengLu* dgDlg;
.....
};
I want to call dgDlg in class CMainFrame .
I also want to call dgDlg 's variables: name and pass
Forwarding your help.
|
|
|
|
|
still not sure what the problem is... if CPipeLineApp is derived from CWinApp, then he owns the CMainFrame, so you have complete access to it...
|
|
|
|
|
...I'm thinking you don't really know the MFC framework?
|
|
|
|
|
I'am a green hand.
|
|
|
|
|
see what ozer wrote above... i think i misunderstood your question, i thought you were trying to access cmainframe from cwinapp, a trivial operation, but you're really trying to access dgDlg (who is owned the cwinapp) from the cmainframe... that's not as trivial (but almost... )
Happy coding!
|
|
|
|