• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 505  文章 - 1034  trackbacks - 0
            <2007年7月>
            24252627282930
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234


            子曾經(jīng)曰過:編程無他,唯手熟爾!

            常用鏈接

            留言簿(94)

            隨筆分類(649)

            隨筆檔案(505)

            相冊

            BCB

            Crytek

            • crymod
            • Crytek's Offical Modding Portal

            Game Industry

            OGRE

            other

            Programmers

            Qt

            WOW Stuff

            搜索

            •  

            積分與排名

            • 積分 - 914915
            • 排名 - 14

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            索性這幾個(gè)UI庫都試試 ^_^

            截圖


            重點(diǎn)
             1)取得句柄
                  
            pSystem->InitD3D((HWND)this->Handle.ToPointer());

             2)刷新畫面也跟Qt一樣靠定時(shí)器:拖個(gè)Timer(注意:默認(rèn)是Enabled:false,改成true),雙擊下,改下面的函數(shù)
                 
                private: System::Void timerRender_Tick(System::Object^  sender, System::EventArgs^  e) {
                             
            if (pSystem)
                             {
                                 pSystem
            ->Render();
                             }
                         }

                   本來我是打Run的主意的
            Application::Run(gcnew MainForm());
            寫個(gè)類繼承自Application,然后override這個(gè)Run,在其中調(diào)用Render(),試了下,編譯出錯(cuò)
            錯(cuò)誤    1    error C3246: “EditorApplication”: 無法從“System::Windows::Forms::Application”繼承,因?yàn)樗驯宦暶鳛?#8220;sealed”    f:\Practise\Practise_2005\WorldEditor\WorldEditor.cpp    9    
            Application類不能被繼承!!!

            看了下xoyojank寫的 原創(chuàng) DirectX in C++/CLI ,也用定時(shí)器好了。

            3)項(xiàng)目配置: 公共語言運(yùn)行庫支持(/clr)    多線程調(diào)試 DLL (/MDd)


            posted on 2008-11-26 23:35 七星重劍 閱讀(1224) 評論(6)  編輯 收藏 引用 所屬分類: PL--c/c++Game GraphicsIDE -- visual c++

            FeedBack:
            # re: 每天30分鐘寫Editor--(2)在CLR窗口里用D3D畫轉(zhuǎn)動(dòng)的三角形 2008-11-27 21:39 xoyojank
            # re: 每天30分鐘寫Editor--(2)在CLR窗口里用D3D畫轉(zhuǎn)動(dòng)的三角形 2008-11-28 14:20 七星重劍
             
            protected override void WndProc(ref Message m)

            {

               
            if (m.Msg == 0x000F)

               {

                  Frame();

                  
            this.Invalidate();

               }

               
            else

                  
            base.WndProc(ref m);

            }

             
            [DllImport("user32.dll")]

            public static extern int SendNotifyMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam); 



            protected override void WndProc(ref Message m)

            {

            if (m.Msg == 0x000F)

            {

               Frame();

               SendNotifyMessage(
            this.Handle, 0x000F, IntPtr.Zero, IntPtr.Zero);

            }

            else

               
            base.WndProc(ref m);

            }

              回復(fù)  更多評論
              
            # re: 每天30分鐘寫Editor--(2)在CLR窗口里用D3D畫轉(zhuǎn)動(dòng)的三角形 2008-11-28 14:21 七星重劍
            這種方式是最好的?
              回復(fù)  更多評論
              
            # re: 每天30分鐘寫Editor--(2)在CLR窗口里用D3D畫轉(zhuǎn)動(dòng)的三角形 2010-04-19 15:46 七星重劍
            http://blogs.msdn.com/tmiller/archive/2005/05/05/415008.aspx

            My last post on render loops (hopefully)..
            The most common topic on my blog returns again. This time it will be brief as all I'm going to to do now is show you the render loop the June'05 SDK will be using. A coworker in another group came up with this markedly simple, yet deceptively effective loop for that groups projects. I liked it so much, i'm sharing it with everyone else. =)

            The basic loop (slightly modified from his original version and the version in the new SDK for ease of reading):

            public void MainLoop()
            {
            // Hook the application's idle event
            System.Windows.Forms.Application.Idle += new EventHandler(OnApplicationIdle);
            System.Windows.Forms.Application.Run(myForm);
            }

            private void OnApplicationIdle(object sender, EventArgs e)
            {
            while (AppStillIdle)
            {
            // Render a frame during idle time (no messages are waiting)
            UpdateEnvironment();
            Render3DEnvironment();
            }
            }

            private bool AppStillIdle
            {
            get
            {
            NativeMethods.Message msg;
            return !NativeMethods.PeekMessage(out msg, IntPtr.Zero, 0, 0, 0);
            }
            }


            And the declarations for those two native methods members:

            [StructLayout(LayoutKind.Sequential)]
            public struct Message
            {
            public IntPtr hWnd;
            public WindowMessage msg;
            public IntPtr wParam;
            public IntPtr lParam;
            public uint time;
            public System.Drawing.Point p;
            }

            [System.Security.SuppressUnmanagedCodeSecurity] // We won't use this maliciously
            [DllImport("User32.dll", CharSet=CharSet.Auto)]
            public static extern bool PeekMessage(out Message msg, IntPtr hWnd, uint messageFilterMin, uint messageFilterMax, uint flags);


            ------

            Simple, elegant, effective. No extra allocations, no extra collections, it just works.. The Idle event fires when there's no messages in the queue, and then the handler keeps looping continuously until a message does appear, in which case it stops.. Once all the messages are handled, the idle event is fired again, and the process starts over.

              回復(fù)  更多評論
              
            # re: 每天30分鐘寫Editor--(2)在CLR窗口里用D3D畫轉(zhuǎn)動(dòng)的三角形 2010-04-19 15:55 七星重劍
            現(xiàn)在見到這種方式,把控件invalidate了讓其重新繪制。

            Application.Idle += new EventHandler(form.Application_Idle);
            Application.Run(form);

            Invalidator.Shutdown();
            MFramework.Shutdown();
            }

            private void Application_Idle(object sender, EventArgs e)
            {
            if (this.Visible &&
            this.WindowState != FormWindowState.Minimized &&
            Form.ActiveForm == this)
            {
            Invalidator.Instance.Update(true);
            }
            }

            在控件的protected override void OnPaint(PaintEventArgs e)里繪制3D內(nèi)容。  回復(fù)  更多評論
              
            # re: 每天30分鐘寫Editor--(2)在CLR窗口里用D3D畫轉(zhuǎn)動(dòng)的三角形 2010-10-31 18:42 funcman
            Void OnIdle(Object^ sender, EventArgs^ e) {
            MSG msg;
            while( !PeekMessage(&msg, 0, 0, 0, 0) ) {
            Render();
            }
            }

            //...

            int main(array<System::String^>^ args) {
            //...

            EventHandler^ idle = gcnew EventHandler(OnIdle);
            Application::Idle += idle;
            Application::Run(gcnew MainForm());
            Application::Idle -= idle;

            return 0;
            }  回復(fù)  更多評論
              
            久久精品一区二区影院| 久久精品青青草原伊人| 久久精品国产黑森林| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 久久久无码精品亚洲日韩按摩 | 久久AV无码精品人妻糸列| 亚洲精品高清国产一线久久| 久久91精品国产91久久麻豆| 亚洲?V乱码久久精品蜜桃| 日韩AV无码久久一区二区 | 日本欧美久久久久免费播放网| 99久久精品国产一区二区| 久久99精品国产麻豆宅宅| 久久精品这里热有精品| 亚洲va久久久噜噜噜久久狠狠| 国产激情久久久久影院| 久久综合国产乱子伦精品免费| 久久99亚洲综合精品首页| 久久国产亚洲精品无码| 久久九九兔免费精品6| 久久97久久97精品免视看秋霞| 97精品久久天干天天天按摩| 国产69精品久久久久APP下载 | 国产成人久久777777| 日韩AV无码久久一区二区| 久久婷婷五月综合国产尤物app| 久久91这里精品国产2020| 青青国产成人久久91网 | 奇米影视7777久久精品人人爽| 久久久99精品成人片中文字幕| 91精品婷婷国产综合久久| 久久99热狠狠色精品一区| 久久国产精品一区二区| 色综合久久88色综合天天| 91久久香蕉国产熟女线看| 久久这里只精品国产99热| 国产AⅤ精品一区二区三区久久| 国产亚洲精午夜久久久久久| 看全色黄大色大片免费久久久| 久久九九久精品国产| 久久午夜夜伦鲁鲁片免费无码影视|