|
|
hello, i want to build a chat engine using MFC c++. what classes of MFC i need can anyone tell me? and i need using procedure of these classes. plz tell me detail about procedure of building chat engine.i want to use MFC classes.
plz help me.
|
|
|
|
|
What is a 'chat engine'? Could you elaborate on your requirements or technical problems?
/M
|
|
|
|
|
its a web chat engine like yahoo messengers.i dont need clone of messenger. only need to transfer a string and receive a string between two people.i want to use c++ MFC. now list me plz needed c++ MFC classes/functions to build it.plz tell me detail how i have to go ahead.tell me step by step to build this web chat engine.
|
|
|
|
|
|
I am looking for an example of code for getting video "capture" from camera to AVI file using AVI stream in plain C++. I need to use the camera data as document (file) in MFC.
There is plenty of sample code (and applications) in here but they all either use C# ,framework library or just read from AVI file.
Thanks for reading Vaclav
|
|
|
|
|
|
Thanks, it does help somewhat. It seems to be just a wrapper for AVI API.
And unless I missed something - it does "takes" the data from a AVI file.
What I am looking for is data coming from video camera. I got it working using capture frames but it does not "fit" into document / view architecture. It needs a capture window and by definition a document does not have a window attached.
I hope I am not totally wrong but how do you tell the stream AVI which device to read from – I’ll need few cameras to accomplish my task.
Thanks for your help.
Cheers Vaclav
|
|
|
|
|
hmm... i think you'll need DirectX, then.
|
|
|
|
|
I believe the DirectX AMCap sample is what you need.
Download and install the latest Windows SDK from Windows SDK for Windows Server 2008 and .NET Framework 3.5[^]
You will find the AMCap sample at the location C:\Program Files\Microsoft SDKs\Windows\v6.1\Samples\Multimedia\DirectShow\Capture for the default installation path.
«_Superman_»
I love work. It gives me something to do between weekends.
|
|
|
|
|
OK, I am downloading it now. Four hours estimate... good night..
Hopefully I can use it on WIndows 2000. .NET won't load on it, but I do not want .net just the sample code.
Thanks Vaclav
|
|
|
|
|
hi,
i can't run this program why
there is 1 error what is it?
#include "stdafx.h"
#include <dsa.h>
using CryptoPP::DSA;
using CryptoPP::DSA_DER;
using CryptoPP::DSA_P1363;
#include <pubkey.h>
using CryptoPP::PrivateKey;
using CryptoPP::PublicKey;
#include <osrng.h>
using CryptoPP::AutoSeededRandomPool;
#include <files.h>
using CryptoPP::FileSource;
using CryptoPP::FileSink;
using CryptoPP::StringSource;
using CryptoPP::StringSink;
bool CreateDSAKeys();
bool SignDSAMessage();
bool VerifyDSAMessage();
int main(int argc, char* argv[])
{
CreateDSAKeys();
SignDSAMessage();
VerifyDSAMessage();
return 0;
}
bool CreateDSAKeys()
{
AutoSeededRandomPool prng;
try
{
// Crypto++ Key Generation
DSA::Signer signer;
PrivateKey& privateKey = signer.AccessPrivateKey();
privateKey.GenerateRandom( prng );
DSA::Verifier verifier( signer );
PublicKey& publicKey = verifier.AccessPublicKey();
// Crypto++ Save Keys
privateKey.Save(FileSink("private.dsa.cpp.key"));
publicKey.Save(FileSink("public.dsa.cpp.key"));
}
catch( CryptoPP::Exception& ex )
{
cerr << "Caught Error:" << endl;
cerr << " " << ex.what() << endl;
return false;
}
catch( std::exception& ex )
{
cerr << "Caught Error:" << endl;
cerr << " " << ex.what() << endl;
return false;
}
return true;
}
bool VerifyDSAMessage()
{
try
{
//
// Crypto++ Load the Pubic Key
//
DSA::Verifier verifier;
PublicKey& publicKey = verifier.AccessPublicKey();
// publicKey.Load(FileSource("public.dsa.cpp.key", true));
// publicKey.Load(FileSource("public.dsa.java.key", true));
publicKey.Load(FileSource("public.dsa.cs.key", true));
//
// Retrieve the Message and the Signature on Message
//
string message, signature;
// C++
FileSource( "dsa.cpp.msg", true, new StringSink( message ) );
FileSource( "dsa.cpp.sig", true, new StringSink( signature ) );
// Java
// FileSource( "dsa.java.msg", true, new StringSink( message ) );
// FileSource( "dsa.java.sig", true, new StringSink( signature ) );
// C#
// FileSource( "dsa.cs.msg", true, new StringSink( message ) );
// FileSource( "dsa.cs.sig", true, new StringSink( signature ) );
//*
// --- Begin Java Specific Conversion ---
//
// Convert: DER -> P1363
//
// Java is DER Encoded Sequence.
// Crypto++ is P1363 format.
/*
{
// From dsa.h: If toFormat == DSA_P1363,
// bufferSize must equal publicKey.SignatureLength()
size_t length = verifier.SignatureLength();
// A buffer for the conversion
byte* buffer = new byte[ length ];
// Sh*t or Go Blind. You make the choice.
if( !buffer ) { return false; }
// Reuse length
length = CryptoPP::DSAConvertSignatureFormat(
buffer, length, DSA_P1363, (const byte*)signature.c_str(),
signature.length(), DSA_DER );
// Reinitialize signature so that it can be used
// in the verifier below with minimal effort
signature = string( (const char*)buffer, length );
delete[] buffer;
}
*/
// --- End Java Specific Conversion ---
//*/
//
// Verify the Signature on the Message
//
bool result = verifier.VerifyMessage(
(const byte*)message.c_str(), message.length(),
(const byte*)signature.c_str(), signature.length() );
if( result )
{
cout << "Signature on Message verified" << endl;
}
else
{
cerr << "Signature on Message not verified" << endl;
return false;
}
//
// Convert the Message
//
int nChars = MultiByteToWideChar( CP_UTF8, 0,
message.c_str(), -1, NULL, NULL );
wchar_t* p = new wchar_t[ nChars ];
if( !p ) { return false; }
MultiByteToWideChar( CP_UTF8, 0, message.c_str(), -1, p, nChars );
wstring wide( p );
delete[] p;
}
catch( CryptoPP::Exception& ex )
{
cerr << "Caught Error:" << endl;
cerr << " " << ex.what() << endl;
return false;
}
catch( std::exception& ex )
{
cerr << "Caught Error:" << endl;
cerr << " " << ex.what() << endl;
return false;
}
return true;
}
bool SignDSAMessage()
{
try
{
//
// Crypto++ Load Private Key
//
DSA::Signer signer;
PrivateKey& privateKey = signer.AccessPrivateKey();
privateKey.Load(FileSource("private.dsa.cpp.key", true));
// Convert the Message
wstring wide = L"Crypto Interop: \u9aa8";
int nChars = WideCharToMultiByte( CP_UTF8, 0,
wide.c_str(), -1, NULL, 0, NULL, FALSE );
char* p = new char[ nChars ];
if( !p ) { return false; }
nChars = WideCharToMultiByte( CP_UTF8, 0,
wide.c_str(), -1, p, nChars, NULL, FALSE );
string narrow( p );
delete[] p;
//
// Sign the Message
//
// Set up for SignMessage()
byte* s = new byte[ signer.MaxSignatureLength() ];
if( !s ) { return false; }
// Sign...
AutoSeededRandomPool prng;
size_t length = signer.SignMessage( prng,
(const byte*) narrow.c_str(), narrow.length(), s );
// Convenience
string signature( (const char*)s, length );
// --- Begin Java Specific Conversion ---
//
// Convert: P1363 -> DER
//
// Crypto++ uses P1363 format.
// Java requires a DER encoded sequence.
/*
{
// Determine size of required buffer
// We can call with a null buffer and 0 size
// when going in this direction
length = CryptoPP::DSAConvertSignatureFormat(
NULL, 0, DSA_DER, (const byte*)signature.c_str(),
signature.length(), DSA_P1363 );
// A buffer for the conversion
byte* buffer = new byte[ length ];
// Sh*t or Go Blind. You make the choice.
if( !buffer ) { return false; }
// Reuse length
length = CryptoPP::DSAConvertSignatureFormat(
buffer, length, DSA_DER, (const byte*)signature.c_str(),
signature.length(), DSA_P1363 );
// Reinitialize signature so that it can be used
// in the verifier below with minimal effort
signature = string( (const char*)buffer, length );
delete[] buffer;
}
*/
// --- End Java Specific Conversion ---
//
// Save the Message and the Signature on Message
//
// mofs: message filestream
// sofs: signature filestream
ofstream mofs, sofs;
mofs.open("dsa.cpp.msg", ios_base::binary | ios_base::trunc );
sofs.open("dsa.cpp.sig", ios_base::binary | ios_base::trunc );
// Save Original Message
mofs.write( narrow.c_str(), (int)narrow.length() );
// Save Signature on Message
sofs.write( (const char*)signature.c_str(), (int)length );
// Cleanup
sofs.close();
mofs.close();
}
catch( CryptoPP::Exception& ex )
{
cerr << "Caught Error:" << endl;
cerr << " " << ex.what() << endl;
return false;
}
catch( std::exception& ex )
{
cerr << "Caught Error:" << endl;
cerr << " " << ex.what() << endl;
return false;
}
return true;
}
|
|
|
|
|
sarroya wrote: there is 1 error what is it?
1/ Read the sticky posting about how to post a good question... And to use an actual subject line.
2/ This isn't a quiz area. If you want to know what's wrong, try and compile it yourself and look at the messages.
After you've fixed it, try single stepping through to see if it behaves as you expect.
3/ I wish you luck when you can narrow down your problem and edit your question.
Best of success,
Iain.
I have now moved to Sweden for love (awwww).
If you're in Scandinavia and want an MVP on the payroll (or happy with a remote worker), or need cotract work done, give me a job! http://cv.imcsoft.co.uk/[ ^]
|
|
|
|
|
Hi,
I did following, but I got an error.
pPopupMenu = new CMenu();
if( pPopupMenu->CreatePopupMenu())
{
pPopupMenu->LoadMenu(MAKEINTRESOURCE(MENUID); --------------> ERROR
}
I can not use "LoadMenu" for popupmenu? How can I fix?
Best regards,
|
|
|
|
|
I thought you can use it, too [*] - but you will need to add an extra ")" to close the function.
Iain.
[*] can't look and be 100% sure.
I have now moved to Sweden for love (awwww).
If you're in Scandinavia and want an MVP on the payroll (or happy with a remote worker), or need cotract work done, give me a job! http://cv.imcsoft.co.uk/[ ^]
|
|
|
|
|
Sorry, that is my typo here.
The program stops at:
BOOL CMenu::Attach(HMENU hMenu)
POPUP MENU
BEGIN
POPUP ""
BEGIN
MENUITEM "Edit", ID_EDIT
MENUITEM "Object ...", ID_OBJECT
MENUITEM SEPARATOR
MENUITEM "Text...", ID_TEXT
END
END
"hMenu" is NULL. Why "hMenu" is null, I created the menu.
Thanks,
|
|
|
|
|
transoft wrote: I can not use "LoadMenu" for popupmenu? How can I fix?
CreatePopupMenu has already attached an HMENU handle to your CMenu object. You cannot attach a second menu like this. You can use CreatePopupMenu or LoadMenu but not both of them on the same CMenu object.
I also recommend avoiding the new/delete and just create the object on the stack. There is no reason to thrash the heap.
Something like this:
CMenu pPopupMenu;
if(pPopupMenu.LoadMenu(MAKEINTRESOURCE(YOUR_RESOURCE_ID)))
{
POINT pt;
GetCursorPos(&pt);
HMENU hmenuTrackPopup = GetSubMenu(pPopupMenu.m_hMenu, 0);
TrackPopupMenu(hmenuTrackPopup, TPM_LEFTALIGN | TPM_LEFTBUTTON, pt.x, pt.y, 0,m_hWnd, NULL);
}
Some MSDN documentation:
Using Menus[^]
Best Wishes,
-David Delaune
|
|
|
|
|
Hi David
Thank you so much.
I have another question for you. I need to create the menubar and toolbar dynamically.
The Mainframe load the default menu from resource like:
"File Window Help"
I want to insert some menu between "File" and "Windows". Could you give some hints?
Best regards,
|
|
|
|
|
The index is a zero based array, you would insert a new menu item as follows:
CMenu m;
if(m.LoadMenu(MAKEINTRESOURCE(YOUR_RESOURCE_ID)))
{
CMenu *pMenu = GetMenu();
if(NULL != pMenu)
{
MENUITEMINFO mii = {0};
mii.cbSize = sizeof(MENUITEMINFO);
mii.fMask = MIIM_ID | MIIM_STRING;
mii.dwTypeData = _T("Inserted Menu");
mii.wID = YOUR_RESOURCE_ITEM_ID;
pMenu->InsertMenuItem(1,&mii,TRUE);
}
}
MENUITEMINFO Structure[^]
InsertMenuItem Function[^]
Best Wishes,
-David Delaune
modified on Sunday, July 19, 2009 7:06 PM
|
|
|
|
|
How do you stop a popup menu from closing when clicking with mouse button?
What I want to do is to create a CMFCDropDownListBox with check boxes (to create a drop list with check boxes). I've created a derived class of CMFCDropDownListBox and CMFCRibbonComboBox.
CMFCDropDownListBox inherits from CMFCPopupMenu.
I've tried to add PreTranslateMessage to my derived DropDownListBox class, but LBUTTONUP/DOWN messages never happens.
Any tip on how to do this? A CMFCRibbonComboBox with check boxes..
|
|
|
|
|
I'm not sure exactly what you're after, but if you look at article: Generic Picker Dropdown Control[^], I imitate a combobox.
You could override the OnKillFocus handler (or remove it), and you'd get a menu-a-like window that doesn't get dismissed.
Or you could go straight with my base CGenericPicker class, and derived your own special drop down.
Good luck,
Iain.
I have now moved to Sweden for love (awwww).
If you're in Scandinavia and want an MVP on the payroll (or happy with a remote worker), or need cotract work done, give me a job! http://cv.imcsoft.co.uk/[ ^]
|
|
|
|
|
What I'm after it to stop CMFCPopupMenu from getting left button click messages, and handle those messages myself.
|
|
|
|
|
I found out how to do it:
Inherit CMFCPopupMenuBar and handle the button clicks there. In my inherited CMFCDropDownListBox I override GetMenuBar and returns an instance of my inherited CMFCPopupMenuBar class.
|
|
|
|
|
Glad you've solved your own problem - always the best learning experience that way!
Iain.
I have now moved to Sweden for love (awwww).
If you're in Scandinavia and want an MVP on the payroll (or happy with a remote worker), or need cotract work done, give me a job! http://cv.imcsoft.co.uk/[ ^]
|
|
|
|
|
Hi, in my application I set the parent of a button to a static control. After I set the owner (setowner) to the parent of the static (the main window) in order to process messages sent when clicking on the button. The problem is that the function OnButtonClicked() is never called when I click on the button.
I did the same thing with a list control, but it works with it.
I don't know how to fix this bug. Any Idea?
Thanks
|
|
|
|
|