|
Thx for your reply.
I did try GlobalFree(hGlobal), follow the code of "pstm->Release()", but Purity told me I am trying to release an unallocated memory. Where shd I put the GlobalFree() function in this case? If I put it before pstm->Release(), Purify told me this message : "[W] PAR: Global/LocalLock(0x571001c) arg #1 (hMem) attempt to lock handle that is on pending free queue. {1 occurrence}"
Thx again
Vincent
|
|
|
|
|
Hi.. I'm total new to GDI+
I dont' even know what it is exactly yet. Before I go seeking more information to find out whether I can use GDI+ to get the images (jpg, tiff, gif) properties, I think I better ask gurus first so if it is not the right one for me, I wont' waste my time reading and searching more information to find out GDI+ can solve my problem.
Could I use GDI+ to get the images (tiff, jpg, or gif) information such as, resolution, image size, color/ black and white etc ?
If GDI+ is the right class to use it. How to use it please.
Thank You
|
|
|
|
|
Hello,
I have RGB data of a bitmap in a buffer. And i want to get a HBitmap from this data so that i can select it in MEmory and then blit it to screen. Can anyone help???
Omar Alvi
|
|
|
|
|
First, a simple question: do you have any other method of transfering the bitmap data, other than raw RGB ? Such as a bitmap file ? Creating bitmaps from raw data is a painful process, and very sensitive to errors..
But, let's get to it. The following check-up list will create somekind of a bitmap for you and blit it to the screen. It might or might not look correct.
1. Create a memory device context that is compatible with the display or the window you wish to blit to.
2. Create a bitmap that is compatible with this DC, specifying the width and height as you do. The width and height are dependant on the size of the color data you have. They MUST match.
3. Select the bitmap into the device context.
4. By using SetPixel , set the color of each pixel in the memory DC. You get the colors from the data at the buffer.
5. Blit from the memory device context into the target DC.
After this, the target DC contains a representation of the bitmap data in memory. The colors may be wrong, and if so, you need to determine the palette that was first used to create the data in the memory. This is next to an impossible task (probably), so I can't advise you further in that.
-Antti Keskinen
----------------------------------------------
The definition of impossible is strictly dependant
on what we think is possible.
|
|
|
|
|
Amm well actually i guess i dont have any other method of trasfering bitmap other than raw RGB.
Actually i have a bitmap lets say image.bmp file i can use LoadImage() to get the hBitmap handle to it which can then easily selected in memory and then blitted to screen...
But the problem is that i want to read an encrypted bmp file(whcih i encrypt myself) and then decrypt it and afterwards i want to display it in GDI so i need to get the hBitmap handle....i guess the only way is to make the bitmap from raw rgb data..any bright ideas ???
Omar Alvi
|
|
|
|
|
If this is the case, then you should divide your process into a two-fold part: the first part consists of the encryption/decryption methods. Both of these functions work on plain files only.
An example: you have a non-encrypted bitmap file. You then give this file's name into the encryption function, that uses the algorithm you determine to write a NEW file, that contains encrypted data. Now, you have an encrypted file.
Next you can give this file as an input parameter to the decryption method, that decrypts the file and WRITES the non-encrypted bitmap file to disk again. When the file write is complete, you can give the file name as a parameter to LoadImage that will then load the bitmap image from disk into memory and give you a HBITMAP handle to it. When the loading is complete, you can delete the non-encrypted bitmap file, leaving only the encrypted one to the disk.
Last alternative is to create the bitmap from scratch. Doing it requires you to fill BITMAPV5HEADER , BITMAPINFO structures, then call CreateDIBitmap to create a device-independent bitmap. An alternative way is to use CreateDIBSection, which will create the DIB and give you a pointer to the location of the DIB bits. You can then use the pointer to write the DIB data directly.
There seems to be one example available here on Code Project. See here.
-Antti Keskinen
----------------------------------------------
The definition of impossible is strictly dependant
on what we think is possible.
|
|
|
|
|
Hey everyone,
I guess this is a pretty generic question, but I figure what the heck. I am looking to work on some outlook settings through a program. I have some users here at work that dont really want to change there outlook settings when they go from the office to home. Does anyone know what file (if there is any) I would have to edit to change settings like their outgoing mailserver? Thanks for all of your help!
There are 10 kinds of people in this world. Those who understand binary and those who don't.
|
|
|
|
|
Did you look in the registry?
"No matter where you go, there your are." - Buckaroo Banzai
-pete
|
|
|
|
|
Totally forgot about that...doh! WIll check now
There are 10 kinds of people in this world. Those who understand binary and those who don't.
|
|
|
|
|
BrockVnm wrote:
Does anyone know what file (if there is any) I would have to edit to change settings like their outgoing mailserver?
Start with the HKEY_CURRENT_USER\Software\Microsoft\Office\Outlook\OMI Account Manager\Accounts registry key.
"When I was born I was so surprised that I didn't talk for a year and a half." - Gracie Allen
|
|
|
|
|
Hi,
I shouldn't have initiated another thread really, but I think that, although the previous question is similar to this new one, this one I have stumbled across with is a bit different.
The question is I have shown a vertical scrollbar in a custom control (by calling ShowScrollBar , but, although I keep it updated by notifying it of the mins and maxes and the current position, it is behaving as if it was still expecting to be initiated: the bar doesn't work; you can't drag the bar as it is always in the same position; . . .
Are there any steps I am missing out here?
Thank you very much for your time.
David
|
|
|
|
|
Please give us a code fragment, so we might see, what's your problem. In general, scrollbars do their work.
|
|
|
|
|
Hi
You may have to add ON_WM_VSCROLL() to your message map and implement the function, maybe something like this, which works for me. Think I stole some of it from mfc's own CScrollView, take a look here too. Don't know why this doesn't work automatically inside mfc. I feel like (by calling SetScrollPos()) I'm telling the scrollbar something it actually already knows. Well mfc is not alway intuitive, and always trying to figure out "why" will make you go nuts . Who knows why scrolling works like this, am I completely out of track here?
- Jesper
void EPropListCtrl::OnVScroll( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar )
{
int nNewPos = -1;
int sp = GetScrollPos(SB_VERT);
if( nSBCode==SB_THUMBPOSITION || nSBCode==SB_THUMBTRACK )
{
nNewPos = nPos;
}
else if( nSBCode==SB_LINEUP )
{
sp -= 5;
nNewPos = sp;
}
else if( nSBCode==SB_LINEDOWN )
{
sp+=5;
nNewPos = sp;
}
else if( nSBCode==SB_PAGEUP )
{
sp-=20;
nNewPos = sp;
}
else if( nSBCode==SB_PAGEDOWN )
{
sp+=20;
nNewPos = sp;
}
if( nNewPos >= 0 )
{
SetScrollPos( SB_VERT , nNewPos );
Invalidate();
}
}
|
|
|
|
|
This is very distressing!
I have been taking a look at some sites and apparently there is much more to scrollbars than it actually seems to be at first.
Do you know if there is a (more) straight forward approach on how to [manually] program scrollbars?
David
BTW: Thanks a lot for the code -- it was very helpful.
|
|
|
|
|
I have around five years of mfc programming behind be, and one thing I've learned is that there is no such a thing as "forward approach". But as I mentioned before, looking at mfc's own scroll code may help you a great deal.
And btw, don't forget, you'll have to set the dc's viewportorg yourself before drawing in your OnPaint() function. This is what makes the control scroll its contents.
something like this (please forgive me if this doesn't compile, it's straight out of my mind..)
void SomeControl::OnPaint()<br />
{<br />
<br />
<br />
CPaintDC dc(this);<br />
int orgx = GetScrollPos(SB_HORZ);<br />
int orgy = GetScrollPos(SB_VERT);<br />
dc.SetViewPortOrg(-orgx,-orgy);<br />
<br />
<br />
dc.MoveTo(0,0);<br />
dc.LineTo(100,100);<br />
<br />
}
Good luck
- Jesper
|
|
|
|
|
Thanks a lot Jesper.
Like I said in my previous post, you have been very helpful.
I only hope I may be of assistance to you in the future.
Cheers,
David
|
|
|
|
|
This article in MSDN
and for example this code in MFC 6 (dllole.cpp) (same in dllnet.cpp) don't connect:
<br />
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID )<br />
{<br />
if (dwReason == DLL_PROCESS_ATTACH)<br />
{<br />
BOOL bRegister = !extensionDLL.bInitialized;<br />
AFX_MODULE_STATE* pModuleState = _AfxGetOleModuleState();<br />
pModuleState->m_hCurrentInstanceHandle = hInstance;<br />
pModuleState->m_hCurrentResourceHandle = hInstance;<br />
pModuleState->m_pClassInit = pModuleState->m_classList.GetHead();<br />
pModuleState->m_pFactoryInit = pModuleState->m_factoryList.GetHead();<br />
VERIFY(AfxInitExtensionModule(extensionDLL, hInstance));<br />
<br />
AfxCoreInitModule();<br />
<br />
AfxWinInit(hInstance, NULL, _T(""), 0);<br />
<br />
if (bRegister)<br />
COleObjectFactory::RegisterAll();<br />
<br />
VERIFY(AfxSetModuleState(AfxGetThreadState()->m_pPrevModuleState) ==<br />
_AfxGetOleModuleState());<br />
DEBUG_ONLY(AfxGetThreadState()->m_pPrevModuleState = NULL);<br />
<br />
CDynLinkLibrary* pDLL = new CDynLinkLibrary(extensionDLL, TRUE);<br />
ASSERT(pDLL != NULL);<br />
pDLL->m_factoryList.m_pHead = NULL;<br />
}<br />
else if (dwReason == DLL_PROCESS_DETACH)<br />
{<br />
AfxTermExtensionModule(extensionDLL);<br />
<br />
ASSERT(AfxGetThreadState()->m_pPrevModuleState == NULL);<br />
AfxGetThreadState()->m_pPrevModuleState =<br />
AfxSetModuleState(_AfxGetOleModuleState());<br />
<br />
AfxTermExtensionModule(extensionDLL, TRUE);<br />
}<br />
else if (dwReason == DLL_THREAD_DETACH)<br />
{<br />
AfxTermThread(hInstance);<br />
}<br />
<br />
return TRUE;
}<br />
<br />
<br />
void AFXAPI AfxOleInitModule()<br />
{<br />
ASSERT(AfxGetModuleState() != AfxGetAppModuleState());<br />
<br />
CDynLinkLibrary* pDLL = new CDynLinkLibrary(extensionDLL, TRUE);<br />
ASSERT(pDLL != NULL);<br />
pDLL->m_factoryList.m_pHead = NULL;<br />
}<br />
Because in the article it says that only if a DLL will be used from MFC exe it's OK to put:
<br />
CDynLinkLibrary* pDLL = new CDynLinkLibrary(extensionDLL, TRUE);<br />
in DLLMain but MFCs code has it anyway which translated into:
<br />
Detected memory leaks!<br />
Dumping objects -><br />
{68} client block at 0x033C4D88, subtype 0, 64 bytes long.<br />
a CDynLinkLibrary object at $033C4D88, 64 bytes long<br />
{64} client block at 0x033C4AA8, subtype 0, 64 bytes long.<br />
a CDynLinkLibrary object at $033C4AA8, 64 bytes long<br />
{57} client block at 0x033C2E18, subtype 0, 64 bytes long.<br />
a CDynLinkLibrary object at $033C2E18, 64 bytes long<br />
Object dump complete.<br />
In my situation.
I do call
<br />
AfxOleInitModule();<br />
AfxNetInitModule();<br />
in my regular DLL as ordered by the article. Now what?
|
|
|
|
|
Any chance any one knows how to make a check box look bigger?
I want to make it just a little bigger so the person doesn't
have to squint to see it. Any ideas? Any demo projects?
I searched everywhere but couldn't find anything.
Please, any response any one can give me will be greatly
appreciated.
Sincerely,
Danielle (an overworked graduate student)
|
|
|
|
|
You could subclass it and override DrawItem() . Or you could specify the "flat" style (in the resource editor) to make it (somewhat) easier to see.
/ravi
My new year's resolution: 2048 x 1536
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
Hello,
I have a CDialog with several buttons. On a button click, children class are called to execute something. My problem is that, sometime, the execution takes awhile, and I can't press the cancel button to stop the execution.
My code looks like that :
CParentClass{
CChildClass* m_ChildClass;
OnButtonClick(){
m_ChildClass->Execute();
}
}
CChildClass{
boolean m_cancel=false;
Execute(){
while(!m_cancel){
//do something
}
}
Thus, I would only want my Parent class to catch the cancel button clik and set the boolean m_cancel to false, while my child class is working.
And I would like this to be done at the parent class level, ie without affecting the code of the child class.
I have read things about threads, and it seems that I could use them to do what I want, but I have a hard time understanding the examples that I have found, ie where in the existing classes the threads need to be put. I have also seen things catching messages (peek message?) but it seems to me that this has to be done at the children class level, in the while loop...
Could anyone redirect me to very simple examples using threads, or help me ?
Thank you
|
|
|
|
|
sandrineV wrote:
I have read things about threads, and it seems that I could use them to do what I want
Yes, you are on the right track.
sandrineV wrote:
but I have a hard time understanding the examples that I have found
Most people are the same. It may take a while, it's not a simple subject, even experienced thread developers can be confused by a particular threading issue.
Here is an article on CodeProject: http://www.codeproject.com/threads/threads_and_mfc.asp[^]
There are many others on MSDN as well.
"No matter where you go, there your are." - Buckaroo Banzai
-pete
|
|
|
|
|
Thanks for your help, I have done the example suggested above, but still a lot of questions arise :
In the initInstance() method of the CMyThreadClass, this is done :
m_pMainWnd=new CMyDialogClass;
m_pMainWnd->SetForegroundWindow();
m_pMainWnd->ShowWindow(SW_SHOW);
Which means that when it is launched, the thread creates a new instance of a Dialog and displays it.
What if I just want to create a user interface thread on a button that is already defined in the main dialog of my class ?
Basically I would just like a "stop" button to be aware of clicks by the user, even though a child class is looping.
I think that one solution would be to create a thread for each child class, but I don't find this very pretty because no child class must run a the same time (except for the class implementing the "stop" command)
Another solution would be to create the "stop" command class as a worker thread, but then I suppose that a click on the button that launches the "stop" won't be accessible either.
Finally, I thought of creating a user interface threat which would handle the stop button, but if I create my Stop Button in the InitInstance() method of my CThreadClass, the button won't appear in the Dialog Ressource, and how can I display it ?
Could anyone tell me if these solutions seem relevant or not, and if one is better than the other ? Any advice would help, I'm a bit lost here.
Sorry again if these questions are irrelevant, but threads are really difficult
|
|
|
|
|
Hello,
How can I maximaze the window in run time in a MFC App
I need to do this without using the resasing button?
Please help me...
|
|
|
|
|
Check CWnd::ShowWindow
and SW_SHOWMAXIMIZED
Papa
while (TRUE)
Papa.WillLove ( Bebe ) ;
|
|
|
|
|
Ok,
But how do i set up this.
CDialogTest test;
test.ShowWindow(SW_MINIMIZE); This or how?
|
|
|
|
|