|
I have created a menu item in an SDI application in vc++ 6.0. the i have mapped the menu command thru class wizard and it has generated the function skelteon of the form. I can briefly tell u want I intend to do:
void CMainframe:: onclickMenu(......)
{
Get the name of the text file to be opened
Create a new window with only scrollbars;
Display the contents of the file opened in this window;
}
Please tell me how to create a window and display the text in it
|
|
|
|
|
In the window generated you can mak a RICHEdit control or even an edit control that supports multiline.
You can either do it with filemapping funtions
CreateFileMapping() //maps a file into the memory
MapViewOfFile() /*this function returns a pointer to a LPVOID which conatins the contetnt of the file*/
gabby
|
|
|
|
|
Hi,
I developed a control panel applet and placed the '.cpl' file in "C:\i soft".
I added a new key under :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Control
Panel\Cpls as ES REG_SZ C:\i soft\hvcescp.cpl
Now, this applet is displaying in the control panel and working fine,but the
icon (that I gave in resource file) is not getting displayed.
If the ".cpl" file is moved to a folder whose name does not contain space characters (e.g.: "isoft"), icon is getting displayed in control panel. Then also, applet is working when I double click on control panel item.
I am responding to the CPL_NEWINQUIRE message with the proper icon ID.
What to be done ? Is there anything wrong with Registry entry given above?
Sunil kumar.A.V., SSE.
|
|
|
|
|
sunilkumar_prog wrote:
I added a new key under :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Control
Panel\Cpls as ES REG_SZ C:\i soft\hvcescp.cpl
Since spaces are involved, have you included the path in quotation marks?
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
|
|
|
|
|
Thanks for the reply.
We tried both single & double quotation marks.Still it is not working.
|
|
|
|
|
//Set up text color
switch(suit){
case (SUIT_CLUBS) : SetTextColor(hDC, C_BLACK); strcpy(strSuit,"Clubs"); break;
case (SUIT_DIAMONDS) : SetTextColor(hDC, C_RED); strcpy(strSuit,"Diamonds"); break;
case (SUIT_HEARTS) : SetTextColor(hDC, C_RED); strcpy(strSuit,"Hearts"); break;
case (SUIT_SPADES) : SetTextColor(hDC, C_BLACK); strcpy(strSuit,"Spades"); break;
I am a novice and would appreciate suggestions on how to fix this, The program has drop down windows i would like to change the color of the text in now it is all black. Thanks
|
|
|
|
|
Insert hDC = GetDC( hWnd ) before switch.
Be careful with strcpy function:
- no end of string
- lenght may overflow
|
|
|
|
|
I want to use command line in mfc.....but i don't know how can i fetch the
parameter of command line through mfc.......if there is any good article related to command line plz reply me.
Thanx.
keep smilling.....b'coz smile is the shortest distance between people....
|
|
|
|
|
Look for CCommandLineInfo for the MFC way in the MSDN docs ... You can also use ::GetCommandLine() Win32 API for the passed command line. Hope this helps.
- tareq
|
|
|
|
|
Thanx sir.....
keep smilling.....b'coz smile is the shortest distance between people....
|
|
|
|
|
I want use this function to view STL vector in watch window of Visual Studio debugger.
the function realisation lookes like this:
HRESULT WINAPI INT_VECTOR_TYPE_Evaluate( DWORD dwAddress, DEBUGHELPER *pHelper, int nBase, BOOL bUniStrings, char *pResult, size_t max, DWORD reserved )
{
std::vector<int,std::allocator<int> > vct;
DWORDLONG qwRealAddress;
DWORD nGot;
if (pHelper->dwVersion<0x20000)
{
// Visual C++ 6.0 version
if(pHelper->ReadDebuggeeMemory( pHelper,
dwAddress,
/*what size i must pass here */
, &vct, &nGot )!=S_OK)
/* at this point we have "access violation"
return E_FAIL;
}
return 0;
}
In sample from MSDN there is structure and all workes ok.
What about vectors?
|
|
|
|
|
i am declearing a BYTE* say pDest
then i call
SafeArrayAccessData(vImage->parray , (void HUGEP**)&pDest);
my q is weather to just call
SafeArrayUnaccessData(vImage->parray);
SafeArrayDestroy(vImage->parray);
or should i also delete pDests ? by delete statements
please help me out
waiting for responce...
|
|
|
|
|
I dont think you need to delete pDest ... only SafeArrayUnaccessData and SafeArrayDestroy is sufficient. Please correct me if I am mistaking ... Hope this helps.
- tareq
|
|
|
|
|
hi frnds..
i got the code for SCREEN CAPTURE..Its working well..
now wat i need is HOW TO TRANSFER THAT CODE TO SOME OTHER MACHINE IN A LAN..
so plz frnds if u any cdoe for that send me..or if u have any suggestion plz tell me..
i will be looking forward for ur replies..
thank u
with luv
kar
Karmegakumar.A B.Tech IT
Amrita Institutions
Coimbatore
|
|
|
|
|
Look at the code below you can get the CxImage class from An article from Davide Pizzolato. Use some Transfer function to transfer the buffer to the client and decode the image and show it.
BYTE* MyIOCP::GetJPGCompressedDesktopCapture(UINT &nArraySize, int nWidth, int nHeight, BYTE nquality)
{
// get the desired window from dialog box
HWND hwnd=::GetDesktopWindow();
// get window size
CRect r;
::GetWindowRect(hwnd,&r);
int nX, nY, nX2, nY2; // coordinates of rectangle to grab
int xScrn, yScrn; // screen resolution
nArraySize=-1;
BYTE* retbuffer=NULL;
// prepare the DCs
HDC dstDC = ::GetDC(NULL);
HDC srcDC = ::GetWindowDC(hwnd); //full window (::GetDC(hwnd); = clientarea)
HDC memDC = ::CreateCompatibleDC(dstDC);
nX = r.left;
nY = r.top;
nX2 = r.right;
nY2 = r.bottom;
// get screen resolution
xScrn = GetDeviceCaps(srcDC, HORZRES);
yScrn = GetDeviceCaps(srcDC, VERTRES);
//make sure bitmap rectangle is visible
if (nX < 0)
nX = 0;
if (nY < 0)
nY = 0;
if (nX2 > xScrn)
nX2 = xScrn;
if (nY2 > yScrn)
nY2 = yScrn;
// nWidth = nX2 - nX;
// nHeight = nY2 - nY;
// create a bitmap compatible with the screen DC
HBITMAP bm =::CreateCompatibleBitmap(dstDC, nWidth, nHeight);
HBITMAP oldbm = (HBITMAP)::SelectObject(memDC,bm);
// copy the screen and resize to the bitmap
//TRACE("%i,%i",nWidth,nHeight);
// Set Correct Stretchmode
::SetStretchBltMode(memDC,HALFTONE);
::StretchBlt(memDC,0,0,nWidth,nHeight,srcDC,nX,nY,nX2,nY2,SRCCOPY);
//::BitBlt(memDC, 0, 0, nWidth, nHeight, srcDC, nX,nY , SRCCOPY);
// Create a JPG image From the bitmap..
CxImage newimage(CXIMAGE_FORMAT_JPG);
newimage.CreateFromHBITMAP(bm);
// free objects
DeleteObject(SelectObject(memDC,oldbm));
DeleteObject(memDC);
// Encode the image to the memory
CxMemFile MemFile;
//newimage.SetCodecOption(0x10,CXIMAGE_FORMAT_JPG);
// Change so that we dont have a transparent background.
newimage.SetTransIndex(-1);
// If Color change it to 24 bit bitmap.
if (!newimage.IsGrayScale())
newimage.IncreaseBpp(24);
newimage.SetJpegQuality(nquality);
MemFile.Open();
// You have to encode and decode it to compress it in reality.
// ?? Very very strange..
BOOL bRet=FALSE;
if(newimage.Encode(&MemFile,CXIMAGE_FORMAT_JPG))
{
if(MemFile.Seek(0,SEEK_SET))
bRet=newimage.Decode(&MemFile,CXIMAGE_FORMAT_JPG);
}
nArraySize=(UINT)MemFile.Size();
if(bRet)
retbuffer=MemFile.GetBuffer();
// Close & Clean up
MemFile.Close();
newimage.Destroy();
return retbuffer;
}
|
|
|
|
|
Hi. I am having problems with deleting objects from a CObArray not freeing up the memory.
NB: The code has been simplified to show only the key points.
In the header
class CBelFileDetails : public CObject
{
public:
CBelFileDetails ()
{
};
~CBelFileDetails () {};
};
In the Implementation
void RemoveArray (CObArray *pA)
{
int j, Count;
Count = pA -> GetSize ();
for (j = 0; j < Count; j++)
{
CObject* P = pA -> GetAt (j);
if (P)
{
TRY
{
delete P;
P = NULL;
}
CATCH_ALL (e)
{
e->ReportError ();
}
END_CATCH_ALL
}
}
pA -> RemoveAll ();
}
void CMainFrame::OnTimer(UINT nIDEvent)
{
int j;
CObArray FileDetailsArray;
for (j = 0; j < NumOfFiles; j++)
{
CBelFileDetails *pFD = new CBelFileDetails ();
FileDetailsArray.Add (pFD);
}
RemoveArray (&FileDetailsArray);
}
The problem is, if I watch the 'Mem Usage' in TaskManager it forever goes up. As if the memory is not being released. I run it in debug mode, and same thing happens. But when I close the application, no memory leaks are reported.
I am wondering if any of you have encountered the same problem and if so, how did you fix it?
|
|
|
|
|
Have you stepped through this code to see if it does what you expect ?
I've never used CObjArray, so I can't comment directly. The Microsoft containers were only provided as a stopgap until the STL arrived. You really should just use a vector. You'd still have to delete pointers held in it, but you could easily write a functor and use for_each to do so.
Christian
I have several lifelong friends that are New Yorkers but I have always gravitated toward the weirdo's. - Richard Stringer
|
|
|
|
|
I've walked through the code and it 'works' perfectly. The problem seems (well to me at least and a fellow workmate) that the problem is when I call delete . I watched the memory using the Visual C++ Memory debug window, and it all got killed to EE EF's as if the object was deleted fine. But in taskmanager, the mem usage did not shrink.
|
|
|
|
|
I am attempting to use GetOpenFileName from a service on W2K and WXP. The service is set to interact with the desktop. The problem is that when the open dialog appears and the user selects the "Desktop" icon on the left panel of the open file dialog, it complains about "C:\Documents and Settings\LocalSystem\desktop" not existing. Note the "LocalDesktop" in that string. I want it to be the name of the current user.
So, how do I tell GetOpenFileName to use the currently logged-on user's context when using the open file dialog? Do I need to impersonate the logged-on user before calling GetOpenFileName? If so, how do I do impersonation WITHOUT asking for user credentials?
Some rudimentary example will suffice, you don't have to right the whole she-bang.
Thank you in advance.
ahz
|
|
|
|
|
After some research, I answered my own question:
OPENFILENAME op;
ZeroMemory(&op, sizeof(op));
op.lStructSize = sizeof(op);
op.hwndOwner = m_hWnd;
op.lpstrFilter = L"JavaScript Files (*.js)\0*.js\0VBScript Files (*.vbs)\0*.vbs\0All Files (*.*)\0*.*\0\0\0";
op.lpstrFile = m_wsFilePathBuf;
op.nMaxFile = cPathSize;
op.lpstrFileTitle = m_wsFileNameBuf;
op.nMaxFileTitle = cNameSize;
op.lpstrTitle = title.Length() ? title : L"Product Name Title";
op.Flags = OFN_DONTADDTORECENT | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_ENABLESIZING | OFN_EXPLORER | OFN_HIDEREADONLY;
bool impersonated = false;
DWORD processID;
if (ProcessIsRunning(L"someuserprocess.exe", processID))
{
HANDLE processHandle;
HANDLE token = 0, duptoken = 0;
BOOL result;
DWORD size = 0;
processHandle = ::OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_DUP_HANDLE, FALSE,processID);
result = ::OpenProcessToken(processHandle, TOKEN_QUERY | TOKEN_IMPERSONATE | TOKEN_DUPLICATE, &token);
result = result ? ::DuplicateToken(token, SecurityImpersonation, &duptoken) : FALSE;
impersonated = (result ? ::ImpersonateLoggedOnUser(duptoken) : FALSE) == TRUE;
}
BOOL result = GetOpenFileName(&op);
if (impersonated)
{
RevertToSelf();
impersonated = false;
}
|
|
|
|
|
Thanks for your sharing...
I studied more by this issue.
thanks very much ,i will remember this.
but do you have msn acount?
You are the best!Me too!
|
|
|
|
|
Good solution, just remember to close your handles when you're done. Also, a couple of points...- What if there is no user running the process you're checking for?
- What if more than one user is running the process you're checking for? Do you use the right one?
Ryan "Punctuality is only a virtue for those who aren't smart enough to think of good excuses for being late" John Nichol "Point Of Impact"
|
|
|
|
|
Ryan Binns wrote:
Good solution, just remember to close your handles when you're done.
yes, caught that and did it.
Also, a couple of points...
What if there is no user running the process you're checking for?
First, in the product I'm developing is an endpoint security product, so if the process queried is not running, the product considers that a fatal error and causes user's machine to reboot.
What if more than one user is running the process you're checking for? Do you use the right one?
Second the product I'm developing is not supported on FUS or TSERVER or CITRIX metaframe. wouldn't make sense in those environments.
Thanks for the comments.
|
|
|
|
|
i know this is easy, but i can't find or remember it right now....
my program is whatever.exe. from inside that program, how can i get the full path that this exe is running?
so, something that returns c:\program files\....\whatever.exe
Any ideas? my brain and search skills appear to be shot tonight...
Thanks!
Marcus Spitzmiller
"Why must life be so hard? Why must I fail at every attempt at masonry?" - Homer
|
|
|
|
|
Pretty sure this is in the FAQ
Christian
I have several lifelong friends that are New Yorkers but I have always gravitated toward the weirdo's. - Richard Stringer
|
|
|
|
|