• <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
            <2008年11月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            30123456


            子曾經曰過:編程無他,唯手熟爾!

            常用鏈接

            留言簿(94)

            隨筆分類(649)

            隨筆檔案(505)

            相冊

            BCB

            Crytek

            • crymod
            • Crytek's Offical Modding Portal

            Game Industry

            OGRE

            other

            Programmers

            Qt

            WOW Stuff

            搜索

            •  

            積分與排名

            • 積分 - 914927
            • 排名 - 14

            最新隨筆

            最新評論

            閱讀排行榜

            評論排行榜

            索性這幾個UI庫都試試 ^_^

            截圖


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

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

                   本來我是打Run的主意的
            Application::Run(gcnew MainForm());
            寫個類繼承自Application,然后override這個Run,在其中調用Render(),試了下,編譯出錯
            錯誤    1    error C3246: “EditorApplication”: 無法從“System::Windows::Forms::Application”繼承,因為它已被聲明為“sealed”    f:\Practise\Practise_2005\WorldEditor\WorldEditor.cpp    9    
            Application類不能被繼承!!!

            看了下xoyojank寫的 原創 DirectX in C++/CLI ,也用定時器好了。

            3)項目配置: 公共語言運行庫支持(/clr)    多線程調試 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畫轉動的三角形 2008-11-27 21:39 xoyojank
            # re: 每天30分鐘寫Editor--(2)在CLR窗口里用D3D畫轉動的三角形 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);

            }

              回復  更多評論
              
            # re: 每天30分鐘寫Editor--(2)在CLR窗口里用D3D畫轉動的三角形 2008-11-28 14:21 七星重劍
            這種方式是最好的?
              回復  更多評論
              
            # re: 每天30分鐘寫Editor--(2)在CLR窗口里用D3D畫轉動的三角形 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.

              回復  更多評論
              
            # re: 每天30分鐘寫Editor--(2)在CLR窗口里用D3D畫轉動的三角形 2010-04-19 15:55 七星重劍
            現在見到這種方式,把控件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內容。  回復  更多評論
              
            # re: 每天30分鐘寫Editor--(2)在CLR窗口里用D3D畫轉動的三角形 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;
            }  回復  更多評論
              
            2021久久精品免费观看| 久久久久99精品成人片试看| 综合人妻久久一区二区精品| 日本人妻丰满熟妇久久久久久| 国产美女久久久| 中文成人无码精品久久久不卡| 综合人妻久久一区二区精品| 色综合久久中文字幕无码| 91精品国产综合久久四虎久久无码一级 | 久久99精品久久久久久hb无码| 久久精品国产只有精品66| 亚洲欧洲日产国码无码久久99| 国产91色综合久久免费分享| 久久久无码精品亚洲日韩蜜臀浪潮| 51久久夜色精品国产| 国产69精品久久久久APP下载| 久久99精品久久久久久久不卡| 内射无码专区久久亚洲| 久久久久国产| 久久99免费视频| 久久夜色精品国产噜噜亚洲AV| 国内精品久久久久久麻豆| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 久久精品国产亚洲av麻豆小说| 久久精品国产精品亜洲毛片| 久久精品aⅴ无码中文字字幕不卡| 性做久久久久久久久久久| 精品久久久久久久久久久久久久久 | 久久久久99精品成人片三人毛片 | 亚洲精品国产自在久久| 91精品国产综合久久香蕉| 国产精品久久午夜夜伦鲁鲁| 伊人久久大香线蕉av不卡| 亚洲伊人久久综合中文成人网| 99久久无码一区人妻| 久久中文字幕一区二区| 日本久久久久久中文字幕| AV无码久久久久不卡网站下载| 国内精品九九久久久精品| 69久久精品无码一区二区| 99久久99久久精品免费看蜜桃|