TN035: การใช้ส่วนหัวของแฟ้มและแฟ้มทรัพยากรหลายกับ Visual c ++

หมายเหตุนี้อธิบายถึงวิธีสนับสนุนแฟ้มทรัพยากรหลายตัวแก้ไขทรัพยากรของ Visual c ++ และส่วนหัวของแฟ้มที่ใช้ร่วมกันในตัวเดียวโครงการ หรือใช้ร่วมกันในหลายโครงการและวิธีการที่คุณสามารถใช้ประโยชน์จากที่สนับสนุน หมายเหตุนี้ตอบคำถามเหล่านี้:

คุณควรทราบว่า ถ้าคุณเพิ่มแฟ้มทรัพยากรเพิ่มเติมของโครงการ ClassWizard จะไม่รู้จักทรัพยากรในแฟ้มเพิ่มเข้าไป?

หมายเหตุนี้ถูกจัดโครงสร้างการตอบคำถามข้างต้นดังนี้:

ภาพรวมของ c ++ภาพวิธีจัดการแฟ้มทรัพยากรและส่วนหัวของแฟ้ม

Visual c ++จัดการเดียวแฟ้มทรัพยากร RC และเกี่ยวเนื่องกับH ส่วนหัวของแฟ้มเป็นคู่ coupled แน่นของแฟ้ม เมื่อคุณแก้ไข และบันทึกทรัพยากรในการแฟ้ม RC คุณทางอ้อมแก้ไข และบันทึกสัญลักษณ์ในที่สอดคล้องกันแฟ้ม H แม้ว่าคุณสามารถเปิด และแก้ไขหลายจุดแฟ้ม RC ครั้ง (โดยใช้ส่วนติดต่อผู้ใช้ของ Visual c ++ของ MDI) ใด ๆ ให้RC แฟ้มคุณทางอ้อมแก้ไขหนึ่งที่สอดคล้องกันส่วนหัวของแฟ้ม?

สัญลักษณ์ส่วนหัวของแฟ้ม

โดยค่าเริ่มต้น Visual c ++เสมอชื่อหัวข้อแฟ้มทรัพยากรที่สอดคล้องกันH คำนึงถึงชื่อของแฟ้มทรัพยากร (เช่น MYAPPRC) การใช้คำสั่งการตั้งค่ารวมแฟ้มใน Visual c ++ คุณสามารถเปลี่ยนชื่อของแฟ้มนี้หัวข้อ โดยแฟ้มสัญลักษณ์หัวข้อแฟ้มในกล่องโต้ตอบการตั้งค่ารวมถึงการปรับปรุง?

อ่านอย่างเดียวไดเรกทีสัญลักษณ์

แม้ว่า Visual c ++แก้ไขหนึ่งส่วนหัวของแฟ้มใด ๆ ที่กำหนดให้เท่านั้นRC แฟ้ม Visual c ++สนับสนุนการอ้างอิงถึงสัญลักษณ์ที่กำหนดไว้ในแฟ้มเพิ่มเติมหัวอ่านอย่างเดียว การใช้คำสั่งการตั้งค่ารวมแฟ้มใน Visual c ++ คุณสามารถระบุหมายเลขใด ๆ ของแฟ้มเพิ่มเติมหัวอ่านอย่างเดียวเป็นไดเรกทีฟฐานสัญลักษณ์อย่างเดียวเป็น หมายข้อจำกัด "อ่านอย่างเดียว" ความ ว่า เมื่อคุณเพิ่มทรัพยากรใหม่ในนี้แฟ้ม RC คุณสามารถใช้สัญลักษณ์ที่กำหนดในแฟ้มแบบอ่านอย่างเดียวหัวข้อ แต่ถ้าคุณลบทรัพยากร สัญลักษณ์ยังคงกำหนดในแฟ้มหัวอ่านอย่างเดียว คุณไม่สามารถเปลี่ยนค่าตัวเลขที่กำหนดให้กับสัญลักษณ์แบบอ่านอย่างเดียว?

ไดเรกทีฟฐานเวลาคอมไพล์

Visual c ++ยังสนับสนุนการซ้อนกันของแฟ้มทรัพยากร ตำแหน่งหนึ่งอีกด้วยแฟ้ม RC # include'd ภายในอีกได้ เมื่อคุณแก้ไขการกำหนดมองไม่เห็นแฟ้มที่ใช้ Visual c ++ ทรัพยากรใด ๆ ในแฟ้ม# include'd RC แต่เมื่อคุณคอมไพล์แฟ้ม RC # include'd แฟ้มจะถูกคอมไพล์ยัง การใช้คำสั่งการตั้งค่ารวมแฟ้มใน Visual c ++ คุณสามารถระบุหมายเลขใด ๆ ของ# include'dRC แฟ้มเป็นไดเรกทีฟฐานเวลาคอมไพล์?

หมายเหตุเกิดอะไรขึ้นถ้าคุณอ่านเป็น Visual c ++มีแฟ้ม RC ที่#รวมของอีกRC แฟ้มที่ไม่ระบุไว้เป็นเวลาคอมไพล์สั่ง สถานการณ์นี้อาจเกิดขึ้นเมื่อคุณนำการ Visual c ++มีRC แฟ้มที่คุณได้รับก่อนหน้านี้รักษาด้วยตนเองกับตัวแก้ไขข้อความ Visual c ++เมื่ออ่าน# include'dแฟ้ม RC มันผสานทรัพยากร# include'd ลงในหลักการแฟ้ม RC เมื่อคุณบันทึกแม่แฟ้ม RC, #รวมงบ in effect จะถูกแทนที่ โดยทรัพยากร# include'd ถ้าคุณไม่ต้องการผสานนี้เกิดขึ้น คุณควรเอา#รวมคำชี้แจงจากไซต์แม่RC แฟ้มก่อนการอ่านเป็น Visual c ++ แล้ว ใช้ Visual c ++ เพิ่มกลับไปเหมือนเดิม#รวมตามที่สั่งการเวลาคอมไพล์?

Visual c ++จะบันทึกในนั้นRC แฟ้มสามชนิดของเหนือการตั้งค่ารวม ข้อมูล (สัญลักษณ์หัวข้อไฟล์ ไดเรกที ฟฐานสัญลักษณ์อย่างเดียวเป็น และเวลาคอมไพล์ไดเรกทีฟฐาน) ใน#รวมและในทรัพยากร TEXTINCLUDE TEXTINCLUDE ทรัพยากร รายละเอียดการใช้งานที่ไม่ปกติต้องจัดการกับ ได้รับการอธิบายในวิธี Visual c ++จัดการตั้งค่ารวมถึงข้อมูล?

วิเคราะห์สร้าง AppWizardRC และแฟ้ม H

ตรวจสอบรหัสแอพลิเคชันที่สร้าง โดย AppWizard ให้มองลึกลงไปว่า Visual c ++ของจัดการหลายแฟ้มทรัพยากรและส่วนหัวของแฟ้ม บทคัดย่อรหัสการตรวจสอบด้านล่างมาจากโปรแกรมประยุกต์ MYAPP ที่ผลิต โดย AppWizard โดยใช้ตัวเลือกเริ่มต้น?

โปรแกรมประยุกต์ที่สร้าง AppWizard ใช้แฟ้มหลายแฟ้มทรัพยากรและหลายหัวข้อไฟล์ เป็นสรุปในไดอะแกรมต่อไปนี้:

nbsp  ทรัพยากรH AFXRESH                    
          \       /                              
           \     /                                
          MYAPP.RC                               
              |                                
              |                              
        RES\MYAPPRC2 AFXRESRC AFXPRINTRC & nbsp
 

คุณสามารถดูความสัมพันธ์แฟ้มเหล่านี้หลายโดยใช้คำสั่งของ Visual c ++แฟ้ม/ชุดประกอบด้วย?

MYAPPRC

แฟ้มทรัพยากรโปรแกรมประยุกต์ที่คุณแก้ไขโดยใช้ Visual c ++?

ทรัพยากรH เป็นแฟ้มหัวข้อเฉพาะโปรแกรมประยุกต์ มันมีชื่อว่าทรัพยากรเสมอH AppWizard สอดคล้องกับ Visual c ++ของเริ่มต้นด้วยการตั้งชื่อของส่วนหัวของแฟ้ม #รวมสำหรับแฟ้มหัวข้อนี้เป็นคำสั่งแรกในแฟ้มทรัพยากร (MYAPPRC):

//Microsoft visual c ++สร้างสคริปต์ของทรัพยากร
//
#รวม "resource.h"

RES\MYAPPRC2

ประกอบด้วยทรัพยากรที่จะไม่ถูกแก้ไข โดย Visual c ++ แต่จะถูกรวมไว้ในขั้นสุดท้ายคอมไพล์แฟ้ม EXE AppWizard สร้างทรัพยากรไม่มี โดยค่าเริ่มต้น เนื่องจาก Visual c ++สามารถแก้ไขทั้งหมดทรัพยากรมาตรฐาน รวมทั้งทรัพยากรรุ่น (เป็นคุณลักษณะใหม่ในครั้งนี้) แฟ้มว่างเปล่าถูกสร้างขึ้น โดย AppWizard ในกรณีที่คุณต้องการเพิ่มทรัพยากรที่จัดรูปแบบแบบกำหนดเองของคุณเองไปยังแฟ้มนี้?

ถ้าคุณใช้ทรัพยากรการจัดรูปแบบแบบกำหนดเอง คุณสามารถเพิ่มเข้าไป RES\MYAPPRC2 และแก้ไขนั้นได้โดยใช้ตัวแก้ไขข้อความของ Visual c ++?

AFXRESRC และ AFXPRINTRC ประกอบด้วยทรัพยากรที่จำเป็นสำหรับคุณลักษณะบางอย่างของกรอบมาตรฐาน เช่น RES\MYAPPRC2 แฟ้มกรอบให้ทรัพยากรเหล่านี้สองคือ # include'd ท้ายของ MYAPPRC และพวกเขาจะระบุไว้ในไดเรกทีฟฐานเวลาคอมไพล์ของกล่องโต้ตอบการตั้งค่ารวมถึง ดังนั้น คุณโดยตรงไม่ดู หรือแก้ไขทรัพยากรกรอบเหล่านี้ขณะที่คุณแก้ไข MYAPPRC ใน Visual c ++ แต่พวกเขาจะถูกคอมไพล์เป็นไบนารีของโปรแกรมประยุกต์RES แฟ้มและขั้นสุดท้ายแฟ้ม EXE สำหรับข้อมูลเพิ่มเติมเกี่ยวกับทรัพยากรกรอบมาตรฐาน รวมถึงขั้นตอนการปรับเปลี่ยนดังกล่าว ดูเทคนิคหมายเหตุ 23?

AFXRESH กำหนดสัญลักษณ์มาตรฐาน เช่นID_FILE_NEWใช้เป็นกรอบ และใช้เฉพาะใน AFXRESRC AFXRESH #รวมของ WINRESH ซึ่งประกอบด้วยเซตย่อยของ WINDOWSH ที่จำเป็น โดย Visual c ++ที่สร้างขึ้นRC แฟ้มเป็น AFXRESRC สัญลักษณ์กำหนดไว้ใน AFXRESH จะพร้อมใช้งานขณะที่คุณแก้ไขแฟ้มทรัพยากรโปรแกรมประยุกต์ (MYAPPRC) ตัวอย่างเช่นID_FILE_NEWใช้สำหรับรายการเมนูแฟ้มใหม่ใน MYAPPทรัพยากรของเมนูของ RC คุณไม่สามารถเปลี่ยน หรือลบสัญลักษณ์เหล่านี้กำหนดกรอบ?

รวมทั้งเพิ่มเติมส่วนหัวของแฟ้ม

แอปพลิเคชันที่สร้างโดย AppWizard มีเพียงสองหัวข้อไฟล์: RESOURCEH และ AFXRESH.เฉพาะทรัพยากรH มีเฉพาะโปรแกรมประยุกต์ คุณอาจจำเป็นต้องรวมแฟ้มเพิ่มเติมหัวอ่านอย่างเดียวในกรณีต่อไปนี้

ส่วนหัวของแฟ้มคือมาจากแหล่งภายนอก หรือคุณต้องการแบ่งปันแฟ้มหัวระหว่างหลายโครงการหรือหลายส่วนของโครงการเดียวกัน?

แฟ้มหัวข้อมีการจัดรูปแบบและความคิดเห็นที่คุณไม่ต้อง Visual c ++เปลี่ยน หรือกรองออกเมื่อคุณบันทึกแฟ้ม ตัวอย่างเช่น คุณอาจต้องการรักษา#กำหนดของที่ใช้สัญลักษณ์ทางคณิตศาสตร์เช่น:

#กำหนดสีแดง 0
#กำหนดสีฟ้า 1
#กำหนดสีเขียว 2
#กำหนด ID_COLOR_BUTTON 1001
#กำหนด ID_RED_BUTTON (ID_COLOR_BUTTON + สีแดง)
#กำหนด ID_BLUE_BUTTON (ID_COLOR_BUTTON + สีน้ำเงิน)
#กำหนด ID_GREEN_BUTTON (ID_COLOR_BUTTON + สีเขียว)

คุณสามารถรวมแฟ้มเพิ่มเติมหัวอ่านอย่างเดียวได้ โดยใช้คำสั่งการตั้งค่ารวมแฟ้มเพื่อระบุ#รวมงบเป็นสั่งสัญลักษณ์แบบที่สอง ใน:

#รวม "afxres.h"
#รวม "second.h"

ความสัมพันธ์ของไดอะแกรมใหม่ของแฟ้มเดี๋ยวนี้มีลักษณะดังนี้:

nbsp                  AFXRESทรัพยากร HH SECONDH                    
          \       /                              
           \     /                                
          MYAPP.RC   
              |                                
              |                              
        RES\MYAPPRC2 AFXRESRC AFXPRINTRC & nbsp
 

การใช้ร่วมกันระหว่างสองแฟ้มหัวข้อแฟ้ม RC

คุณอาจต้องการใช้ร่วมกันระหว่างสองแฟ้มหัวข้อRC แฟ้มที่อยู่ในโครงการต่าง ๆ หรืออาจในโครงการเดียวกัน ทำเพียงแค่ใช้เทคนิคแบบไดเรกทีฟฐานที่อธิบายข้างต้นเพื่อให้ทั้งสองแฟ้ม RC ในกรณีที่ทั้งสองRC แฟ้มคือสำหรับโปรแกรมประยุกต์ต่าง ๆ (โครงการต่าง ๆ), ผลลัพธ์จะแสดงในไดอะแกรมต่อไปนี้:

nbsp    ทรัพยากรH AFXRESทรัพยากร HH (สำหรับ MYAPP1) ที่สองH   (for MYAPP2)             
          \       /     \       /           
           \     /       \     /             
          MYAPP1.RC MYAPP2RC                 
           /    \        /     \                   
          /      \      /       \            
RES\MYAPP1.RC2 AFXRESRC RES\MYAPP2RC2 AFXPRINTRC & nbsp
 

กรณีที่ส่วนหัวของแฟ้มที่สองใช้ร่วมกัน ด้วยสองแฟ้ม RC ในแอพลิเคชันเดียวกัน (โครงการ) ได้มีการกล่าวถึงด้านล่าง?

ใช้ทรัพยากรแฟ้มหลายแฟ้มในโครงการเดียวกัน

Visual c ++และคอมไพเลอร์ทรัพยากรสนับสนุนหลายแฟ้ม RC ในโครงการเดียวกันผ่าน#รวมของหนึ่งแฟ้ม RC ภายในอีกด้วย หลายซ้อนได้ มีเหตุผลต่าง ๆ การแบ่งทรัพยากรของโครงการของคุณออกเป็นหลายแฟ้ม RC:

คุณสามารถ#รวมวินาทีRC ในไดเรกทีฟฐานเวลาคอมไพล์ในกล่องโต้ตอบการตั้งค่ารวมถึง:

#รวม "res\myapp.rc2"nbsp / / ทรัพยากรแก้ไขไม่ใช่ - Visual c ++
#รวม "second.rc" / / วินาทีRC แฟ้ม

#รวม "afxres.rc" / / มาตรฐานคอมโพเนนต์
#รวม "afxprint.rc" / / การพิมพ์/การพิมพ์ตัวอย่างทรัพยากร(&N)

ผลลัพธ์จะแสดงในไดอะแกรมต่อไปนี้:

nbsp  ทรัพยากรH AFXRESH                    
          \       /                              
           \     /                                
          MYAPP.RC
              |                                
              |                              
        RES\MYAPPRC2
        วินาทีRC AFXRESRC AFXPRINTRC & nbsp
 

ใช้เวลาคอมไพล์ไดเรกทีฟฐาน คุณสามารถจัดระเบียบของ Visual c ++สามารถแก้ไข และแก้ไขไม่ได้ทรัพยากรเข้าหลายแฟ้ม RC ที่ MYAPP "หลัก"RC ไม่ได้เรื่อง แต่#รวมอีกด้วยแฟ้ม RC ถ้าคุณกำลังใช้โครงการ Visual c ++แฟ้มหมาก แล้วคุณควรมี "ต้นแบบ"RC แฟ้มในโครงการเพื่อให้ทรัพยากร# include'd ทั้งหมดจะถูกคอมไพล์ ด้วยโปรแกรมประยุกต์ของคุณ?

บังคับของแฟ้มที่ไม่สามารถแก้ไข Visual c ++

RES\MYAPP สร้าง AppWizardRC2 แฟ้มเป็นตัวอย่างของแฟ้มที่ประกอบด้วยแหล่งข้อมูลที่คุณไม่ต้องการการอ่านโดยบังเอิญใน Visual c ++ และเขียนแล้ว ก็กลับออก ด้วยการสูญเสียการจัดรูปแบบข้อมูล เพื่อปกป้องนี้ เราวางบรรทัดต่อไปนี้ในการเริ่มต้นของการ RES\MYAPPแฟ้ม RC2:

#ifdef APSTUDIO_INVOKED
 nbsp  #error แฟ้มนี้ไม่สามารถแก้ไข ด้วย Visual c ++
#endif //APSTUDIO_INVOKED(&N)

เมื่อ Visual c ++ compilesแฟ้ม RC มันกำหนดAPSTUDIO_INVOKEDเป็นRC_INVOKED ถ้าโครงสร้างแฟ้มที่สร้างโดย AppWizard เสียหาย และ Visual c ++อ่านข้างบนบรรทัด #error รายงานข้อผิดพลาดร้ายแรง และยกเลิกการอ่านแฟ้ม RC?

สัญลักษณ์ที่ใช้ร่วมกัน โดยหลาย Visual c ++-แก้ไขการจัดการแฟ้ม RC

ประเด็นที่สองเกิดขึ้นเมื่อคุณแบ่งทรัพยากรของคุณลงในหลายRC แฟ้มที่คุณต้องการแก้ไขแยกต่างหากใน Visual c ++:

ไดอะแกรมต่อไปนี้แสดงให้เห็นถึงแนวทางที่องค์กรของRC และH แฟ้มที่เกี่ยวข้องกับปัญหาแรก:

nbsp             MYAPPRC
             /         \
            /           \
MYSTRSH / MYSHAREDH \ MYMENUSH
     \    /    /      \   \    \
      \  /    /        \   \    \
   MYSTRSRC MYMENUSRC(&N)

ในตัวอย่างนี้ ทรัพยากรสตริงที่จะเก็บในแฟ้มทรัพยากรที่หนึ่ง MYSTRSRC และเมนูจะเก็บในอีก MYMENUSRC สัญลักษณ์ เช่นสำหรับคำสั่ง อาจจำเป็นต้องใช้ร่วมกันระหว่างสองแฟ้ม ตัวอย่าง ID_TOOLS_SPELL อาจเป็น ID ของรายการการสะกดในเมนู Tools คำสั่งเมนู และยังอาจเป็นสตริงที่ ID ของพร้อมท์รับคำสั่งที่แสดงขึ้นตามกรอบในแถบสถานะของหน้าต่างหลักของโปรแกรมประยุกต์?

สัญลักษณ์ ID_TOOLS_SPELL จะถูกเก็บในแฟ้มหัวข้อที่ใช้ร่วมกัน MYSHAREDH.คุณรักษาแฟ้มนี้หัวข้อที่ใช้ร่วมกันด้วยตนเองกับตัวแก้ไขข้อความ Visual c ++โดยตรงแก้ไขไม่ ในทรัพยากรสองแฟ้ม MYSTRSRC และ MYMENUSRC คุณระบุ#รวม MYSHAREDH ในไดเรกทีอ่านอย่างเดียวสำหรับ MYAPPRC การใช้คำสั่งการตั้งค่ารวมแฟ้ม ตามที่อธิบายไว้ก่อนหน้านี้?

จะสะดวกที่สุดในการคาดหมายว่าจะเป็นสัญลักษณ์ที่คุณจะใช้ร่วมกันก่อนที่คุณพยายามใช้เพื่อระบุทรัพยากรใด ๆ เพิ่มสัญลักษณ์หัวข้อร่วมกันแฟ้ม และ ถ้าคุณไม่ได้ # include'd หัวข้อร่วมกันแฟ้มในไดเรกทีฟฐานอย่างเดียวเป็นที่สำหรับการRC แฟ้ม ดำเนินการดังกล่าวก่อนที่จะใช้สัญลักษณ์ ถ้าคุณไม่ได้คาดการณ์ร่วมกันสัญลักษณ์อย่างนี้ แล้วคุณจะไปด้วยตนเอง (โดยใช้ตัวแก้ไขข้อความ) ย้าย#กำหนดคำสั่งสัญลักษณ์จาก พูด MYMENUSH เพื่อ MYSHAREDก่อนที่จะใช้ใน MYSTRS HRC?

เมื่อคุณจัดการสัญลักษณ์ในหลายแฟ้ม RC คุณยังต้องช่วย Visual c ++หลีกเลี่ยงการกำหนดค่าตัวเลข ID เดียวกันสำหรับทรัพยากรที่แตกต่างกัน (สัญลักษณ์) ใด ๆ ให้RC แฟ้ม Visual c ++กำหนดรหัสในแต่ละโดเมน ID สี่แบบเพิ่มหน่วย ระหว่างเซสชันการแก้ไข Visual c ++ยังคงติดตามของ ID ล่าสุดจะถูกกำหนดในโดเมนในแฟ้มสัญลักษณ์หัวข้อสำหรับแต่ละตัวแฟ้ม RC นี่คือค่า APS_NEXT คืออะไรสำหรับการว่าง (ใหม่)แฟ้ม RC:

#กำหนด _APS_NEXT_RESOURCE_VALUEnbsp 101
#กำหนด _APS_NEXT_COMMAND_VALUE 40001
#กำหนด _APS_NEXT_CONTROL_VALUE 1000
#กำหนด _APS_NEXT_SYMED_VALUE 101(&N)

_APS_NEXT_RESOURCE_VALUEเป็นสัญลักษณ์ค่าถัดไปที่จะใช้สำหรับการโต้ตอบทรัพยากร ทรัพยากรเมนู และอื่นๆ ช่วงถูกต้องสำหรับทรัพยากรสัญลักษณ์ค่าเป็น 1 ในการ 0x6FFF?

_APS_NEXT_COMMAND_VALUEเป็นสัญลักษณ์ค่าถัดไปที่จะใช้สำหรับระบุคำสั่งการ ช่วงถูกต้องสำหรับคำสั่งสัญลักษณ์ค่าเป็น 0x8000 กับ 0xDFFF?

_APS_NEXT_CONTROL_VALUEเป็นสัญลักษณ์ค่าถัดไปที่จะใช้สำหรับควบคุมการโต้ตอบ ช่วงถูกต้องสำหรับการโต้ตอบควบคุมสัญลักษณ์ค่าเป็น 8 การ 0xDFFF?

_APS_NEXT_SYMED_VALUEเป็นสัญลักษณ์ค่าถัดไปที่จะออกเมื่อคุณกำหนดค่าสัญลักษณ์โดยใช้คำสั่งสร้างในเบราว์เซอร์สัญลักษณ์ด้วยตนเอง?

Visual c ++เริ่ม มีค่าสูงขึ้นเล็กน้อยว่า กฎหมายที่ต่ำสุดค่าเมื่อสร้างใหม่แฟ้ม RC AppWizard จะยังเตรียมใช้งานค่าเหล่านี้เป็นสิ่งที่เหมาะสมสำหรับโปรแกรมประยุกต์ของ MFC ดูข้อมูลเพิ่มเติมเกี่ยวกับช่วงของค่า ID, 20 หมายเหตุทางเทคนิค?

ขณะนี้ ทุกครั้งที่คุณสร้างแฟ้มทรัพยากรใหม่ แม้ในโครงการเดียวกัน Visual c ++กำหนดค่า_APS_NEXT_เดียวกัน ซึ่งหมายความว่า กล่องโต้ตอบว่า ถ้าคุณเพิ่มการ พูด หลายแสดงในสองแตกต่างกันแฟ้ม RC ก็มีแนวโน้มสูงว่า #เดียวที่กำหนดค่าจะถูกกำหนดให้กับกล่องโต้ตอบที่แตกต่างกัน ตัวอย่างเช่น IDD_MY_DLG1 ในครั้งแรกRC แฟ้มอาจถูกกำหนดให้เหมือนกับหมายเลข 101 เป็น IDD_MY_DLG2 ในวินาทีนั้นแฟ้ม RC?

เมื่อต้องการหลีกเลี่ยงปัญหานี้ คุณควรจองช่วงตัวเลขแยกต่างหากสำหรับแต่ละโดเมนสี่ของรหัสในที่เกี่ยวข้องแฟ้ม RC ทำได้ โดยการปรับปรุงด้วยตนเองค่า_APS_NEXTในแต่ละตัวRC แฟ้มก่อนที่คุณเริ่มต้นการเพิ่มทรัพยากร ตัวอย่างเช่น ถ้าแรกRC แฟ้มใช้ค่าเริ่มต้นที่_APS_NEXTแล้วคุณอาจต้องการกำหนดค่าต่อไปนี้_APS_NEXTวินาทีแฟ้ม RC:

#กำหนด _APS_NEXT_RESOURCE_VALUEnbsp 2000
#กำหนด _APS_NEXT_COMMAND_VALUE 42000
#กำหนด _APS_NEXT_CONTROL_VALUE 2000
#กำหนด _APS_NEXT_SYMED_VALUE 2000(&N)

แน่นอน จะยังคงสามารถให้ Visual c ++จะกำหนดรหัสมากในครั้งแรกแฟ้ม RC ที่ค่าตัวเลขเริ่มต้นการซ้อนทับข้อมูลที่สำรองไว้สำหรับการที่สองแฟ้ม RC คุณควรสำรองขนาดใหญ่เพียงพอช่วงดังนั้นนี้ไม่เกิดขึ้น?

การจัดการการเชื่อมโยงระหว่างRC,CPP และแฟ้ม H

เมื่อ Visual c ++จะบันทึกการแฟ้ม RC จะมีบันทึกการเปลี่ยนแปลงสัญลักษณ์การทรัพยากรสอดคล้องแฟ้ม H ใด ๆ ของคุณCPP แฟ้มที่อ้างอิงถึงทรัพยากรในเครื่องRC แฟ้มต้อง#รวมทรัพยากรแฟ้ม H ปกติจากภายในแฟ้มหัวข้อหลักของโครงการของคุณ นี้นำไปไม่พึงประสงค์ผลข้างเคียงเนื่องจากการจัดการภายในโครงการของสภาพแวดล้อมการพัฒนาที่สแกนแฟ้มต้นฉบับสำหรับหัวข้ออ้างอิง ทุกครั้งที่คุณเพิ่มสัญลักษณ์ใหม่ใน Visual c ++ ทั้งหมด#รวมทรัพยากรแฟ้มการ CPPH จะต้องถูก recompiled?

Visual c ++ circumvents การพึ่งพาในทรัพยากรH ด้วยการรวมข้อคิดเห็นต่อไปนี้เป็นบรรทัดแรกของทรัพยากรแฟ้ม H:

 //{{NO_DEPENDENCIES } }

สภาพแวดล้อมการพัฒนาแปลข้อคิดเห็นนี้ โดยละเว้นการเปลี่ยนแปลงทรัพยากรดังนั้นซึ่งขึ้นกับ HCPP แฟ้มจะไม่ต้องถูก recompiled?

Visual c ++จะเพิ่ม //{{NO_DEPENDENCIES } } บรรทัดที่แสดงความคิดเห็นRC แฟ้มเมื่อคุณบันทึกแฟ้ม ในบางกรณี ได้ของการอ้างอิงที่สร้างบนทรัพยากรH อาจนำไปสู่ข้อผิดพลาดรันไทม์ undetected เวลาเชื่อมโยง ตัวอย่างเช่น ถ้าคุณใช้เบราว์เซอร์สัญลักษณ์เพื่อเปลี่ยนค่าตัวเลขที่กำหนดให้เป็นสัญลักษณ์สำหรับทรัพยากร ทรัพยากรจะไม่ถูกต้องพบ และโหลดเมื่อโปรแกรมประยุกต์ใช้งานจริงถ้าการCPP แฟ้มที่อ้างอิงถึงทรัพยากรถูก recompiled ในบางกรณี คุณควรอย่างชัดเจน recompile ใด ๆCPP แฟ้มที่คุณทราบว่าได้รับผลจากความเปลี่ยนแปลงสัญลักษณ์ในทรัพยากรH หรือเลือกจัดทำใหม่ทั้งหมด ถ้าคุณจำเป็นต้องเปลี่ยนบ่อย ๆ สัญลักษณ์ค่าสำหรับกลุ่มทรัพยากร คุณจะคงพบว่ายิ่งสะดวก และปลอดภัยกว่าสัญลักษณ์เหล่านี้ลงในแฟ้มแยกต่างหากหัวอ่านอย่างเดียว ระบาดไว้ตามที่อธิบายไว้ในส่วนข้างต้นรวมถึงการเพิ่มเติมส่วนหัวของแฟ้ม?

วิธีจัดการกับ Visual c ++ ชุดประกอบด้วยข้อมูล

ตามที่กล่าวไว้ข้างต้น เมนูแฟ้มคำสั่งการตั้งค่ารวมถึงช่วยให้คุณระบุข้อมูลสามชนิด:

ต่อไปนี้อธิบายถึงวิธีการเก็บรักษาข้อมูลนี้ในของ Visual c ++แฟ้ม RC คุณไม่ต้องการข้อมูลนี้ใช้ Visual c ++ แต่มันอาจเพิ่มความเข้าใจของคุณเพื่อให้คุณสามารถเพิ่มเติมปรับใช้คุณลักษณะการตั้งค่ารวมถึง?

แต่ละชนิดสามข้างต้นรวมถึงการตั้งค่าข้อมูลจะถูกเก็บไว้ในเครื่องแฟ้ม RC ในฟอร์มสองฟอร์ม: (1) เป็น#รวม หรือไดเรกอื่น ๆ ที interpretable คอมไพเลอร์ทรัพยากร และ (2) เป็นพิเศษ TEXTINCLUDE ทรัพยากร interpretable เท่านั้นโดย Visual c ++?

วัตถุประสงค์ของทรัพยากร TEXTINCLUDE คือการ เก็บการตั้งค่ารวมข้อมูลในแบบฟอร์มที่ได้ความพร้อมในกล่องโต้ตอบการตั้งค่ารวมถึง Visual c ++ของ อย่างปลอดภัย TEXTINCLUDE คือชนิดของทรัพยากรที่ถูกกำหนด โดย Visual c ++ Visual c ++รู้จักสามเฉพาะ TEXTINCLUDE ทรัพยากรที่มีทรัพยากรระบุหมายเลข 1, 2 และ 3:

I.d ทรัพยากร TEXTINCLUDE? ชนิดของข้อมูลที่รวมการตั้งค่า
1 สัญลักษณ์ส่วนหัวของแฟ้ม
2 อ่านอย่างเดียวไดเรกทีสัญลักษณ์
3 ไดเรกทีฟฐานเวลาคอมไพล์

แต่ละชนิดสามของการตั้งค่ารวมข้อมูลเป็นภาพประกอบ โดยค่าเริ่มต้น MYAPPRC และทรัพยากรH แฟ้มที่สร้าง โดย AppWizard ตามที่อธิบายไว้ด้านล่าง \0 พิเศษ และ "" โทเค็นระหว่างบล็อกที่เริ่มต้นและสิ้นสุดจะต้องตามไวยากรณ์ RC ระบุสายอักขระที่มีการหยุดการทำงานเป็นศูนย์และอักขระอัญประกาศตามลำดับ?

สัญลักษณ์ส่วนหัวของแฟ้ม

รูปแบบของข้อมูลสัญลักษณ์ส่วนหัวของแฟ้มที่ถูกแปล โดยคอมไพเลอร์ทรัพยากรคือ #เพียงรวมงบ:

#รวม "resource.h"

TEXTINCLUDE ทรัพยากรที่สอดคล้องกัน:

1 TEXTINCLUDE DISCARDABLE
เริ่มต้น
   # resource.h\0 "
สิ้นสุด

อ่านอย่างเดียวไดเรกทีสัญลักษณ์

อ่านอย่างเดียวไดเรกทีสัญลักษณ์จะถูกรวมไว้ด้านบนของ MYAPPRC ในแบบดังนี้ interpretable โดยคอมไพเลอร์ทรัพยากร:

#รวม "afxres.h"

TEXTINCLUDE ทรัพยากรที่สอดคล้องกัน:

2 TEXTINCLUDE DISCARDABLE
เริ่มต้น
   "#รวม" "afxres.h""\r\n"
   "\0"
สิ้นสุด

ไดเรกทีฟฐานเวลาคอมไพล์

ไดเรกทีฟฐานเวลาคอมไพล์จะถูกรวมไว้ในตอนท้ายของ MYAPPRC ในแบบดังนี้ interpretable โดยคอมไพเลอร์ทรัพยากร:

#ifndef APSTUDIO_INVOKED
///////////////////////
//
/ / จาก TEXTINCLUDE 3
//
#รวม "res\myapp.rc2"nbsp / / ทรัพยากรแก้ไขไม่ใช่ - Visual c ++

#รวม "afxres.rc" / / มาตรฐานคอมโพเนนต์
#รวม "afxprint.rc" / / การพิมพ์/การพิมพ์ตัวอย่างทรัพยากร
#endif / / ไม่ APSTUDIO_INVOKED(&N)

การสั่งให้คำสั่ง APSTUDIO_INVOKED #ifndef Visual c ++เพื่อข้ามผ่านไดเรกทีฟฐานเวลาคอมไพล์?

TEXTINCLUDE ทรัพยากรที่สอดคล้องกัน:

3 TEXTINCLUDE DISCARDABLE
เริ่มต้น
"#รวม" "res\myapp.rc2""nbsp / / ไม่ใช่ - Visual c ++แก้ไข resources\r\n "
"\r\n"
"#รวม""afxres.rc" " / / มาตรฐาน components\r\n "
"#รวม""afxprint.rc" " / / การพิมพ์/การพิมพ์อย่าง resources\r\n "
"\0"
สิ้นสุด(&N)

หมายเหตุด้านเทคนิคตามหมายเลข|nbsp หมายเหตุด้านเทคนิคตามประเภท(&N)

Index