如何在程序中动态调用已经做好的ATL控件?

解决方案 »

  1.   

    http://www.codeguru.com/activex/SDas.html
    Dynamic creation and placement of ActiveX controls - Saurabh Dasgupta (2001/09/10)
    Most of the applications that use ActiveX controls, do so by embedding them at design time. This article demonstrates how simple it is to create and place Active X controls at run time.
      

  2.   

    i had see it ,but it based in dialog,in my program i want to based MDI,i have try do so in that method,but failer.do you have any method?help me....thanks and wishes!
      

  3.   

    ////////////////////////////////////////////////////////////////////////////////
    // Use swflash.ocx to play flash 
    // if it works, it is written by masterz, otherwise I don't know who writes it(*_*)
    ////////////////////////////////////////////////////////////////////////////////
    #define MAX_LOADSTRING 100
    #import "c:\winnt\system32\macromed\flash\flash.ocx" 
    #include <atlbase.h>
     CComModule _Module;
    #include <atlwin.h>
    #pragma comment(lib,"atl")
    #define ODS(x) OutputDebugString(x)
    // Global Variables:
    HINSTANCE hInst; // current instance
    TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
    TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text
    CAxWindow m_container;
    using namespace ShockwaveFlashObjects;
    IShockwaveFlash* shwaveflash;// Foward declarations of functions included in this code module:
    ATOM MyRegisterClass(HINSTANCE hInstance);
    BOOL InitInstance(HINSTANCE, int);
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
    MSG msg;
    // Initialize global strings
    wsprintf(szTitle,"use flash control in sdk exe");
    wsprintf(szWindowClass,"flashinsdk");
    MyRegisterClass(hInstance);
    CoInitialize(NULL);
    // Perform application initialization:
    if (!InitInstance (hInstance, nCmdShow)) 
    return FALSE;
    while (GetMessage(&msg, NULL, 0, 0)) 
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    CoUninitialize();
    return msg.wParam;
    }
     
    //  FUNCTION: MyRegisterClass()
    //  PURPOSE: Registers the window class.
    ATOM MyRegisterClass(HINSTANCE hInstance)
    {
    WNDCLASSEX wcex;
    wcex.cbSize = sizeof(WNDCLASSEX); 
    wcex.style = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc = (WNDPROC)WndProc;
    wcex.cbClsExtra = 0;
    wcex.cbWndExtra = 0;
    wcex.hInstance = hInstance;
    wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName = NULL;//(LPCSTR)IDC_FLSH;
    wcex.lpszClassName = szWindowClass;
    wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    return RegisterClassEx(&wcex);
    }//   FUNCTION: InitInstance(HANDLE, int)
    //   PURPOSE: Saves instance handle and creates main window
    BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
    {
       HWND hWnd;
       hInst = hInstance; // Store instance handle in our global variable
    AtlAxWinInit();
       hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
          CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
       if (!hWnd)
          return FALSE;
       ShowWindow(hWnd, nCmdShow);
       UpdateWindow(hWnd);
       return TRUE;
    }
    HWND heditfilepath;LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    TCHAR szHello[MAX_LOADSTRING];
    wsprintf(szHello,"use flash control in sdk");
    HWND hbtnstart;
    HWND hbtOpenFile;
    RECT rc;
    switch (message) 
    {
    case WM_CREATE:
    GetClientRect(hWnd, &rc );
    rc.top = (rc.bottom+rc.top)/2;
    m_container.Create( hWnd, rc, LPCTSTR("ShockwaveFlash.ShockwaveFlash.1"), WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL );//create a browser control
    hbtnstart=CreateWindow("BUTTON","play",WS_CHILD|WS_VISIBLE,0,0,120,30,hWnd,(HMENU)0x100,hInst,0);
    hbtOpenFile = CreateWindow("BUTTON","Open...",WS_CHILD|WS_VISIBLE,130,0,100,30,hWnd,(HMENU)0x101,hInst,0);

    heditfilepath=CreateWindow("EDIT","filepath",WS_CHILD|WS_VISIBLE|WS_BORDER,0,40,420,30,hWnd,(HMENU)0x101,hInst,0);
    SetWindowText(heditfilepath,"c:\\downloads\\Sayforever.swf");
    m_container.QueryControl( __uuidof(IShockwaveFlash), reinterpret_cast<void**>(&shwaveflash) );
    break;
    case WM_SIZING:
    GetClientRect(hWnd, &rc );
    rc.top = (rc.bottom+rc.top)/2;
    m_container.MoveWindow(&rc,true);
    break;
    case WM_COMMAND:
    wmId    = LOWORD(wParam); 
    wmEvent = HIWORD(wParam); 
    // Parse the menu selections:
    switch (wmId)
    {
    case 0x100:
    {
    ODS("0x100");
    char buf[256];
    GetWindowText(heditfilepath,buf,255);
    _bstr_t bstr((char*)buf);
    ODS(buf);
    //bstr=_bstr_t("c:\\2.1.swf");
    shwaveflash->put_Movie(bstr); // you have to change the path here
    shwaveflash->Play();
    }
    break;
    case 0x101:
    {

    char fileName[256];
    fileName[0]=0;
    OPENFILENAME ofStruct;
    ZeroMemory(&ofStruct,sizeof(ofStruct));
    ofStruct.lStructSize=sizeof(OPENFILENAME);
    ofStruct.hwndOwner=hWnd;
    ofStruct.nFilterIndex=1;
    ofStruct.lpstrFile=fileName;
    ofStruct.nMaxFile=sizeof(fileName);
    ofStruct.lpstrTitle="Choose a flash";
    ofStruct.Flags=OFN_FILEMUSTEXIST;
    ofStruct.lpstrDefExt="*";
    ofStruct.lpstrInitialDir="C:\\Downloads";
    if(HIWORD(wParam)==BN_CLICKED)
    if(GetOpenFileName(&ofStruct))
    {
    SetWindowText(heditfilepath,ofStruct.lpstrFile);
    _bstr_t bstr((char*)ofStruct.lpstrFile);
    shwaveflash->put_Movie(bstr); // you have to change the path here
    shwaveflash->Play();
    }
    DWORD dwerr=CommDlgExtendedError();
    switch(dwerr) {
    case CDERR_DIALOGFAILURE:
    OutputDebugString("CDERR_DIALOGFAILURE");
    break;
    case CDERR_FINDRESFAILURE:
    OutputDebugString("CDERR_FINDRESFAILURE");
    break;
    case CDERR_INITIALIZATION:
    OutputDebugString("CDERR_INITIALIZATION");
    break;
    default:
    break;
    ;
    }

    }
    break;
    default:
       return DefWindowProc(hWnd, message, wParam, lParam);
    }
    break;
    case WM_PAINT:
    hdc = BeginPaint(hWnd, &ps);
    RECT rt;
    GetClientRect(hWnd, &rt);
    DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
    EndPaint(hWnd, &ps);
    break;
    case WM_DESTROY:
    PostQuitMessage(0);
    break;
    default:
    return DefWindowProc(hWnd, message, wParam, lParam);
       }
       return 0;
    }
      

  4.   

    thanks a lot...i found it is well...right now my program works well...thanks and wishes...