我想做一个小程序,具体内容是一些小位图在一个通明的窗口上随意运动
我用cdialog类,创建了一个透明的窗口(整个屏幕的),可是不能让它一启动
程序就弹出来,而位图的移动还没开始实现!
请各位高手指点

解决方案 »

  1.   

    呵呵,我在大一时就用VB实现了。还会显示“I LOVE YOU”到处跑。“可是不能让它一启动
    程序就弹出来,而位图的移动还没开始实现!
    ”不明白、
      

  2.   

    你没明白我的意思
    我是说怎样一开始就让透明窗口出来
    而不是出dialog
    我信箱[email protected]
    如果有例程发给我好么?
    一定加分
      

  3.   

    没有dialog出来,你的透明窗体可以出来吗?
      

  4.   

    自己写一个透明的窗口类,在app的初始化时调用自己的就可以了
    已经有这种类了,可以参考,很多的
      

  5.   

    http://www.vckbase.com/code/downcode.asp?id=1540这是个透明时钟源代码
      

  6.   

    easy创建透明窗口的代码网上到处都是然后把放位图的PICTURE的控件HWND句柄得到
    然后用MoveWindow来移动PICTURE控件就行了
      

  7.   

    哦,在程序开始的时候,你用GetTickCount()获得当前系统启动后运行的时间
    DWORD starttime=GetTickCount();
    while((GetTickCount()-starttime)<10000);//等待10秒
    CMyDialog dlg;  //谈出对话矿
    dlg.DoModal();
    .....
      

  8.   

    实现透明对话框BOOL CApi_egDlg::OnInitDialog()
    {
    CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range.
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
    CString strAboutMenu;
    strAboutMenu.LoadString(IDS_ABOUTBOX);
    if (!strAboutMenu.IsEmpty())
    {
    pSysMenu->AppendMenu(MF_SEPARATOR);
    pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    }
    } // Set the icon for this dialog.  The framework does this automatically
    //  when the application's main window is not a dialog
    SetIcon(m_hIcon, TRUE); // Set big icon
    SetIcon(m_hIcon, FALSE); // Set small icon

    // TODO: Add extra initialization here
    ::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);//TopMost
    m_sld.SetRange(10,255);
    m_sld.SetPos(128); SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
    GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
    HINSTANCE hInst = LoadLibrary("User32.DLL"); 
    if(hInst) 
    {            
    typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);          
    MYFUNC fun = NULL;
    //取得SetLayeredWindowAttributes函数指针     
    fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
    if(fun)fun(this->GetSafeHwnd(),0,128,2);     
    FreeLibrary(hInst); 
    } return TRUE;  // return TRUE  unless you set the focus to a control
    }
    void CApi_egDlg::OnReleasedcaptureSlider1(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    BYTE eff=(BYTE)m_sld.GetPos();
    HINSTANCE hInst = LoadLibrary("User32.DLL"); 
    if(hInst) 
    {            
    typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);          
    MYFUNC fun = NULL;
    //取得SetLayeredWindowAttributes函数指针     
    fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
    if(fun)
    fun(this->GetSafeHwnd(),0,eff,2);     
    FreeLibrary(hInst); 
    }; CString str;
    str.Format("%%%d",100*eff/255);
    // InvalidateRect(CRect(10,10,30,30));
    GetDlgItem(IDC_STATIC1)->SetWindowText(str);

    *pResult = 0;
    }
      

  9.   

    呵呵,在窗口上加一个Flash控件,内容用Flash来做,肯定生动得多。
      

  10.   

    现在我做出来一个透明窗体
    加入了一幅位图,位图也能够在窗口中移动
    我用的是先移动一幅位图,然后用一幅白色位图擦除前面的位图
    可是总是出一条白色的轨迹(白色位图话出来的)
    我用光栅操作
    bitbit{bitmap,srcinvert)
    bitbit{mask,srcand}
    bitbit(bitmap,srcinvert)
    这样轨迹是没了
    可是位图成反色的了
    请教高手