การเขียนโปรแกรมด้วยภาษาซีแบบกราฟิกอินเตอร์เฟส การสร้าง GUI ด้วย Qt

ขอให้เป็นวันที่ดี! ในบทช่วยสอนนี้ เราจะสร้างแอปพลิเคชัน GUI แรกของคุณใน MS วิชวลสตูดิโอ. มันจะเป็น "Hello World" ชนิดหนึ่งสำหรับแอปพลิเคชันกราฟิก ฉันจะพูดทันทีว่า การใช้งานวินโดวส์ฟอร์มไม่ใช่วิธีเดียวสำหรับโปรแกรมเมอร์ C# ในการสร้างแอปพลิเคชันแบบกราฟิก (แอปพลิเคชันที่มีส่วนติดต่อผู้ใช้แบบกราฟิก) แต่เป็นจุดเริ่มต้นที่ดีในการเริ่มต้นเรียนรู้ ดังนั้นเราจึงเปิดตัว Visual Studio

เปิดตัว? จากนั้นไปที่ธุรกิจ! ไปที่เมนูหลักและเลือกรายการ "ไฟล์ - ใหม่ - โครงการ" ดังแสดงในรูปด้านล่าง

ในหน้าต่างที่ปรากฏขึ้น:

  • ทางด้านซ้าย เลือก "เทมเพลต - Visual C # - Windows";
  • ในพื้นที่หลัก เลือกองค์ประกอบ "Windows Forms Application";
  • ในส่วนล่างของหน้าต่าง ให้ป้อนชื่อโครงการและระบุตำแหน่งบนดิสก์

โดยทั่วไปดังรูปด้านล่าง

คุณได้ระบุสิ่งที่คุณต้องการหรือไม่? จากนั้นคลิกที่ปุ่ม "ตกลง" ตอนนี้คุณควรเห็นสิ่งนี้ (พื้นที่หลักถูกเน้นด้วยสี่เหลี่ยม):

ในภาพด้านบน ฉันได้ติดป้ายกำกับพื้นที่หลัก: พื้นที่ตัวออกแบบ (บนซ้าย) พื้นที่ตัวสำรวจโซลูชัน (บนขวา) และพื้นที่คุณสมบัติ (ล่างขวา) นี่คือพื้นที่ที่เราจะทำงานด้วยบ่อยที่สุด

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

ในการทำเช่นนี้ให้เลือกแบบฟอร์มในตัวออกแบบ (สำหรับสิ่งนี้คุณสามารถคลิกซ้ายที่แบบฟอร์ม) และไปที่บล็อกคุณสมบัติซึ่งเราพบบรรทัด "ข้อความ" (คำคือข้อความที่เรากำลังมองหา ในคอลัมน์ด้านซ้าย) ดังแสดงในรูปด้านล่าง

คุณสมบัติ "ข้อความ" ของแบบฟอร์มหลักของแอปพลิเคชัน

โปรดทราบว่าคอลัมน์ด้านซ้ายแสดงชื่อ (ชื่อคุณสมบัติ) และคอลัมน์ด้านขวาแสดงค่า

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

ตอนนี้คุณสามารถสร้างโครงการและเรียกใช้ได้ ในการดำเนินการนี้ ให้ไปที่เมนูหลักแล้วเลือก "สร้าง - สร้างโซลูชัน" จากนั้นเราเปิดแอปพลิเคชันสำหรับสิ่งนี้เราเลือกรายการ "ดีบั๊ก - เรียกใช้โดยไม่แก้ไขจุดบกพร่อง" ในเมนูหลัก ดังนั้นคุณควรเห็นหน้าต่างต่อไปนี้

ในบทเรียนหน้าเราจะมาดูกันว่า งานง่ายๆกับตัวออกแบบฟอร์ม และการตั้งค่าองค์ประกอบ GUI และบทเรียนนี้ก็สิ้นสุดลง เราสร้างแอปพลิเคชันกราฟิกตัวแรก สร้างและเปิดใช้งาน

สวัสดีทุกคน. ในบทเรียนก่อนหน้านี้ ฉันได้พูดคุยเกี่ยวกับการสร้างคอนโซลแอปพลิเคชันในสภาพแวดล้อม Borland C++ Builder จากบทเรียนนี้ เราจะเรียนรู้ C++ โดยใช้โปรแกรมกราฟิกเป็นตัวอย่าง ใครอยากเรียนรู้วิธีสร้างคอนโซล สามารถอ่านหนังสือ "The Art of Building Console Applications in C++" โปรแกรมแรกของเราจะเป็นโปรแกรมที่แสดงตัวเลขสุ่ม เปิด borlandyayu เพียงแค่ไม่สร้างแอปพลิเคชันคอนโซล หลังจากเปิดตัว แบบฟอร์มต่อไปนี้จะปรากฏขึ้นบนหน้าจอ:

ที่ด้านบนจะมีแถบเครื่องมือ:

ทางด้านขวา ตัวตรวจสอบวัตถุและรายการแบบฟอร์ม:

ส่วนประกอบ (ไม่เหมือน BASIC) ถูกแบ่งออกเป็นแท็บแล้ว ตามชื่อ เดาได้ไม่ยากว่าส่วนประกอบประเภทใดที่วางอยู่บนแท็บ เปิดแท็บมาตรฐานและวางส่วนประกอบในแบบฟอร์มเหมือนของฉัน:

ปุ่มจะมีชื่อว่า Button1 เธอต้องมีการเปลี่ยนแปลง ในหน้าต่างด้านซ้ายล่างของ Borland จะแสดงคุณสมบัติของส่วนประกอบซึ่งจะต้องเปลี่ยนเป็นของเรา:

ที่ปุ่ม คำอธิบายภาพ (จารึก) เปลี่ยนเป็น สร้าง

สำหรับป้ายกำกับ Label1 ให้เปลี่ยนคุณสมบัติคำบรรยายเป็นตัวเลข

ใน Edit1 คุณสมบัติ Text (ข้อความในการแก้ไขเอง) จะถูกลบออก

หลังจากการปรับเปลี่ยนเหล่านี้ แบบฟอร์มจะมีลักษณะเหมือนของฉัน:

เราเสร็จสิ้นด้วยรูปแบบการมองเห็น อย่างไรก็ตาม คุณสมบัติส่วนใหญ่ใน Borlyad มีลักษณะเหมือน BASIC หรือ Delphi ทดลองกับพวกเขา

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

วันนี้เราจะใช้เหตุการณ์คลิกเท่านั้น คลิกสองครั้งที่ปุ่มและเข้าสู่หน้าต่างรหัส:

เหตุการณ์การคลิกสำหรับปุ่มถูกสร้างขึ้นโดยอัตโนมัติ โค้ดจะอยู่ระหว่างวงเล็บปีกกา เช่นเดียวกับแอปพลิเคชันคอนโซล เราเขียนรหัส:

โมฆะ __fastcall TForm1::Button1Click(TObject *Sender) ( double aaa; //ใส่จำนวนที่สร้างโดยตัวประมวลผลที่นี่ String count; //เขียนหมายเลขเดียวกัน แต่ลดขนาดลงเป็น string Randomize; //นี่เป็นสิ่งจำเป็นเพื่อให้ ตัวเลขไม่ซ้ำ aaa=random (34)*43646; //สร้างตัวเลขใดๆ ก็ได้ count=FloatToStr (aaa); //แปลตัวเลขเป็นสตริงโดยใช้ฟังก์ชัน FloatToString Edit1->Text=count; //ส่งออกตัวแปรสตริง ลงในหน้าต่างข้อความ)

อัลกอริทึมนั้นเรียบง่าย เราประกาศตัวแปรเพื่อจัดเก็บตัวเลขที่เป็นเศษส่วน และตัวแปรสำหรับตัวเลขในรูปแบบสตริง ความจริงก็คือไม่สามารถแสดงตัวเลขที่สร้างขึ้นทันทีในกล่องข้อความได้ (จะมีข้อผิดพลาด ข้อความถูกคาดหมายและได้รับตัวเลข) ดังนั้นการใช้ฟังก์ชัน FloatToStr เราจึงแปลตัวเลขเป็นสตริงและแสดงใน กล่องข้อความ. สำหรับเอาต์พุต เราเปลี่ยน (โดยใช้เครื่องหมาย -> (คล้ายกับจุดใน vb)) เป็นคุณสมบัติข้อความ Edit1 และแสดงข้อความที่นั่น นั่นคือทั้งหมดที่สำหรับตอนนี้.

อย่างไรก็ตาม คำถามทดแทน: ใครผสมพันธุ์เร็วกว่ากัน ไวรัสคอมพิวเตอร์, จีนหรือกระต่าย?


ความคิดเห็น()

วิทย

อาร์เทมก้า

"สุ่ม; // นี่เป็นสิ่งจำเป็นเพื่อไม่ให้ตัวเลขซ้ำกัน" ฉันยังคงทำซ้ำ จะทำอย่างไร?

อันเดรย์

มี 2 ​​ตัวเลือก 1 ใช้ "สุ่ม ();" หรือในบรรทัดที่ 6 ทำให้ฟังก์ชันซับซ้อน เช่น เพิ่มวินาที

อันเดรย์

"วินาที" หรือผลลัพธ์ของการบวกตัวเลขสุ่มหลอกสองตัวหารด้วยวินาที - ยิ่งมีปัจจัยมากเท่าใดก็ยิ่งคาดเดาไม่ได้มากเท่านั้น

อาร์เทมก้า อเล็กซี่ (alex13sh)

สุ่ม
เพื่อให้ตัวเลขไม่ซ้ำกันเมื่อเปิดโปรแกรม
นั่นคือ เปิดโปรแกรม กดปุ่มหลายครั้ง
1)5
2)47
3)86
นี่คือฉันในจำนวนเต็ม
ถ้าคุณปิดโปรแกรมแล้วเปิดใหม่อีกครั้งเมื่อกดปุ่มตามลำดับจะมีหมายเลขเดียวกันพร้อมลำดับเดียวกัน
สิ่งนี้ไม่มีการสุ่ม แต่จะไม่ถูกลบออก

และสิ่งที่ทำซ้ำในลักษณะนี้
1)3
2)69
3)1
4)3
5)8
6)1
สิ่งนี้ใช้ไม่ได้กับการสุ่ม
เพื่อหลีกเลี่ยงสิ่งนี้ Andrey ตอบไปแล้ว))

เบซโซด

ฉันมี Visual c++.net ในคอมพิวเตอร์ของฉัน ฉันไม่สามารถหาตำรา, ซอร์สโค้ดสำหรับมัน ช่วยด้วย

อาลี05

ฉันเห็นหนังสือเรียนเกี่ยวกับ Visual C ++.Net ในร้านหนังสือ "Nikita Kultin Programming Basics in ไมโครซอฟต์วิชวล C ++ 2010" เป็นเพียงการแสดงวิธีการสร้าง แอพพลิเคชั่นกราฟิกภายใต้ Windows (WinForms)

คูลแฮ็กเกอร์ นินเทนโด

ฉันสงสัยว่า "ไม่ดี" ของเขาคืออะไร?

คูลแฮ็กเกอร์

ในกรณีที่ไม่มีความสามารถในการนำเสนอเนื้อหาอย่างถูกต้องและทำให้คุณคุ้นเคยกับรูปแบบการเขียนโปรแกรมที่ไม่ดี ให้ใช้ชื่อตัวแปร/ฟังก์ชันที่ทับศัพท์

เอ็ดเวิร์ด คูลแฮ็กเกอร์

กระทรวงศึกษาธิการและวิทยาศาสตร์แห่งสหพันธรัฐรัสเซีย

สถาบันการศึกษางบประมาณของรัฐบาลกลาง

การศึกษาวิชาชีพที่สูงขึ้น

"ยูฟา สเตท ออยล์

มหาวิทยาลัยเทคนิค"

ภาควิชาวิทยาการคอมพิวเตอร์และวิศวกรรมไซเบอร์เนติกส์

การสร้างแอปพลิเคชัน GUI ใน Microsoft Visual Studio 2010

เครื่องช่วยสอน

สำหรับห้องปฏิบัติการและชั้นเรียนภาคปฏิบัติ

กับลูกศิษย์สายตรง

230100 (09.03.01) "วิศวกรรมสารสนเทศและคอมพิวเตอร์"

อุปกรณ์ช่วยสอนให้ข้อมูลทางทฤษฎี งานสำหรับภาคปฏิบัติและห้องปฏิบัติการของหลักสูตร "การเขียนโปรแกรม"

คู่มือนี้ส่งถึงอาจารย์ในสาขาวิชาและนักศึกษาในสาขาวิชา: 230100 "Informatics and Computer Engineering"

เรียบเรียงโดย: Gabdullina A.A., Art. อาจารย์ประจำภาควิชา วีทีไอเค

Druzhinskaya E.V. , ศิลปะ อาจารย์ประจำภาควิชา วีทีไอเค

ผู้วิจารณ์: Filippov V.N., Ph.D., รองศาสตราจารย์ภาควิชา วีทีไอเค.

1. ข้อมูลเชิงทฤษฎี 4

1.1. แนวคิดพื้นฐาน4

1.2. รู้จักกับ แอพพลิเคชั่นวินโดวส์แบบฟอร์มใน Microsoft Visual Studio 2010 4

1.3. แบบฟอร์ม 7 การควบคุม

1.5. ฟังก์ชั่น MessageBox 9

1.6. การควบคุมกล่องข้อความ10

2. งานจริง ความรู้เบื้องต้นเกี่ยวกับ Windows Form Application ใน Microsoft Visual Studio 2010 12

2.1. โครงสร้างการประเมินผลงานที่แล้วเสร็จ12

2.2. ขั้นตอนการปฏิบัติงานจริง12

3. งานห้องปฏิบัติการ การพัฒนาโปรแกรมใน Microsoft Visual Studio 2010 16

3.1. คำสั่งแล็บ16

3.2. ภารกิจที่ 1. การจัดตารางของฟังก์ชันและการคำนวณค่าในช่วงเวลาที่กำหนดด้วยขั้นตอนที่กำหนด 16

3.3. งานเดี่ยว19

3.4. ภารกิจที่ 2 การประมวลผล อาร์เรย์สองมิติ 21

3.5. งานเดี่ยว27

  1. ข้อมูลเชิงทฤษฎี

  1. 1.1. แนวคิดพื้นฐาน

ปัจจุบันระบบอัตโนมัติของกระบวนการข้อมูลถูกนำเสนอโดยการพัฒนาแอปพลิเคชันซอฟต์แวร์ที่มีส่วนต่อประสานกราฟิกกับผู้ใช้ (GUI) ที่จัดการการไหลของข้อมูล

ส่วนต่อประสานกราฟิกกับผู้ใช้ (GUI) เป็นระบบวิธีการโต้ตอบของผู้ใช้กับอุปกรณ์ตามการนำเสนอของวัตถุและฟังก์ชันของระบบทั้งหมดที่มีให้สำหรับผู้ใช้ในรูปแบบของส่วนประกอบหน้าจอกราฟิก (หน้าต่าง ปุ่ม แถบเลื่อน ฯลฯ)

บ่อยครั้งที่องค์ประกอบส่วนต่อประสานใน GUI ถูกนำมาใช้บนพื้นฐานของคำอุปมาอุปไมยและแสดงวัตถุประสงค์และคุณสมบัติซึ่งทำให้ผู้ใช้ที่ไม่ได้เตรียมตัวเข้าใจและเชี่ยวชาญโปรแกรมได้ง่ายขึ้น ดังนั้น งานของผู้ใช้จะดำเนินการกับรูปแบบหน้าจอที่มีวัตถุควบคุมและแถบเครื่องมือพร้อมปุ่มการดำเนินการสำหรับการประมวลผล

ส่วนติดต่อผู้ใช้แบบกราฟิกมาตรฐานต้องเป็นไปตามข้อกำหนดหลายประการ:

รักษาเทคโนโลยีสารสนเทศในการทำงานของผู้ใช้กับผลิตภัณฑ์ซอฟต์แวร์

มุ่งเน้นไปที่ผู้ใช้ปลายทางที่สื่อสารกับโปรแกรมที่ระดับการโต้ตอบภายนอก

ปฏิบัติตามหลักการ "หก" เมื่อไม่เกิน 6 แนวคิดรวมอยู่ในแถบเมนูเดียว ซึ่งแต่ละรายการมีไม่เกิน 6 ตัวเลือก

    รักษาวัตถุประสงค์ที่เป็นมาตรฐานของออบเจกต์กราฟิก และถ้าเป็นไปได้ ตำแหน่งของออบเจกต์บนหน้าจอ

ในการเขียนโปรแกรมเชิงวัตถุ เราจัดการกับคลาสและอ็อบเจกต์ ออบเจกต์เป็นประเภทข้อมูลแบบผสม: รวมค่าหลายค่าไว้ในหน่วยเดียวและอนุญาตให้เราเขียนและจัดเก็บค่าเหล่านั้นตามชื่อ กล่าวอีกนัยหนึ่ง ออบเจกต์เป็นคอลเล็กชันของคุณสมบัติที่ไม่มีลำดับ โดยแต่ละรายการจะมีชื่อและค่า ค่าที่มีชื่อซึ่งมีอยู่ในวัตถุสามารถเป็นประเภทดั้งเดิม เช่น ตัวเลขหรือสตริง หรือวัตถุอื่นๆ

เมื่อพัฒนาแอปพลิเคชันที่ไม่ใช่คอนโซล แนวคิดหลักคือฟอร์ม

ฟอร์มคือคอนเทนเนอร์สำหรับการโฮสต์การควบคุมสภาพแวดล้อมการออกแบบ

คุณสมบัติ - ความสามารถในการเข้าถึงข้อมูลที่เก็บไว้ในองค์ประกอบนี้

วิธีการคือชุดของการกระทำที่วัตถุสามารถดำเนินการได้

เหตุการณ์คือการกระทำที่รับรู้โดยวัตถุ (เช่น การคลิกเมาส์ การกดปุ่ม) ซึ่งสามารถตั้งโปรแกรมการตอบสนองได้ เช่น การตอบสนองของวัตถุต่อเหตุการณ์

อัปเดตล่าสุด: 05/26/2019

ใน Xamarin.Forms อินเทอร์เฟซแบบภาพประกอบด้วยหน้าต่างๆ หน้าเป็นวัตถุของคลาส หน้า ใช้พื้นที่หน้าจอทั้งหมด นั่นคือสิ่งที่เราเห็นบนหน้าจอ อุปกรณ์โทรศัพท์เป็นเพจ แอปพลิเคชันสามารถมีหนึ่งหน้าขึ้นไป

หน้ายอมรับหนึ่งในคอนเทนเนอร์เค้าโครงเป็นเนื้อหา ซึ่งจะมีองค์ประกอบภาพมาตรฐาน เช่น ปุ่มและช่องข้อความ ตลอดจนองค์ประกอบเค้าโครงอื่นๆ

ลองมาดูโครงการ HelloApp ที่สร้างในหัวข้อที่แล้ว (หรือสร้างใหม่) ตามค่าเริ่มต้น อินเทอร์เฟซทั้งหมดจะถูกสร้างขึ้นในคลาส App ซึ่งอยู่ในไฟล์ App.xaml.cs และแสดงถึงแอปพลิเคชันปัจจุบัน:

รหัสเริ่มต้นคือ:

ใช้ระบบ; ใช้ Xamarin.Forms; ใช้ Xamarin.Forms.Xaml; เนมสเปซ HelloApp ( แอพคลาสบางส่วนสาธารณะ: แอปพลิเคชัน ( แอพสาธารณะ () ( InitializeComponent (); MainPage = new MainPage (); ) ได้รับการป้องกันแทนที่เป็นโมฆะ OnStart () ( // จัดการเมื่อแอปของคุณเริ่มทำงาน ) ป้องกันการแทนที่เป็นโมฆะ OnSleep () ( / / จัดการเมื่อแอปของคุณเข้าสู่โหมดสลีป ) ป้องกันการแทนที่ void OnResume() ( // จัดการเมื่อแอปของคุณกลับมาทำงานต่อ ) ) )

คลาส App เริ่มต้นด้วย Constructor โดยเรียกใช้เมธอด InitializeComponent() ก่อน ซึ่งจะเริ่มต้นอ็อบเจกต์ จากนั้นจึงตั้งค่าคุณสมบัติ MainPage ผ่านคุณสมบัตินี้ คลาส App ตั้งค่า หน้าแรกแอพพลิเคชั่น. ในกรณีนี้ จะถูกกำหนดโดยคลาส HelloApp.MainPage ซึ่งเป็นคลาสที่กำหนดในไฟล์ MainPage.xaml และ MainPage.xaml.cs

แต่เส้นทางนี้ไม่ใช่เส้นทางเดียว Xamarin.Forms ช่วยให้คุณสร้างส่วนต่อประสานภาพโดยใช้โค้ด C# หรือประกาศโดยใช้ภาษา xaml คล้ายกับ html หรือใช้แนวทางเหล่านี้ร่วมกัน

การสร้างอินเทอร์เฟซจากโค้ด C#

มาเพิ่มคลาส C# ปกติให้กับโปรเจ็กต์ HelloApp ซึ่งเราจะเรียกว่า StartPage

และกำหนดเนื้อหาต่อไปนี้ในชั้นนี้:

ใช้ Xamarin.Forms; เนมสเปซ HelloApp ( class StartPage: ContentPage ( public StartPage() ( Label header = new Label() ( Text = "Hello from Xamarin Forms" ); this.Content = header; ) ) )

คลาสนี้แสดงถึงเพจ ดังนั้นจึงสืบทอดมาจากคลาส ContentPage ตัวสร้างสร้างป้ายกำกับที่มีข้อความซึ่งตั้งค่าเป็นเนื้อหาของหน้า (นี้เนื้อหา = ส่วนหัว)

เพื่อกำหนดให้หน้าหลักเป็น หน้าแรกเปลี่ยนคลาสแอพ:

ใช้ Xamarin.Forms; เนมสเปซ HelloApp ( แอพคลาสบางส่วนสาธารณะ: แอปพลิเคชัน ( แอปสาธารณะ () ( InitializeComponent (); MainPage = new StartPage (); ) ได้รับการป้องกันแทนที่เป็นโมฆะ OnStart () ( // จัดการเมื่อแอปของคุณเริ่มทำงาน ) ป้องกันการแทนที่เป็นโมฆะ OnSleep () ( / / จัดการเมื่อแอปของคุณเข้าสู่โหมดสลีป ) ป้องกันการแทนที่ void OnResume() ( // จัดการเมื่อแอปของคุณกลับมาทำงานต่อ ) ) )

ขณะนี้คุณสมบัติ MainPage ชี้ไปที่ StartPage ที่สร้างขึ้นใหม่

นอกจากนี้ยังเป็นที่น่าสังเกตว่า Visual Studio มีเทมเพลตสำเร็จรูปสำหรับเพิ่มคลาสเพจใหม่ด้วยรหัสที่ง่ายที่สุด ดังนั้น หากต้องการเพิ่มหน้าใหม่ คุณต้องเลือกเทมเพลตหน้าเนื้อหา (C#) เมื่อเพิ่มองค์ประกอบใหม่:

คลาสนี้ถูกเพิ่มในโครงการหลักของโซลูชัน (ในกรณีนี้คือ HelloApp)

คลาสของเพจที่เพิ่มเข้ามาจะมีรหัสดังต่อไปนี้:

ใช้ระบบ; ใช้ System.Collections.Generic; ใช้ System.Linq; ใช้ System.Reflection.Emit; ใช้ System.Text; ใช้ Xamarin.Forms; เนมสเปซ HelloApp ( คลาสสาธารณะ Page1: ContentPage ( สาธารณะ Page1() ( เนื้อหา = StackLayout ใหม่ ( เด็ก = ( ป้ายกำกับใหม่ ( ข้อความ = "สวัสดีเพจ" ) ) ); ) ) )

คลาสนี้จะสืบทอดจากคลาส ContentPage พื้นฐานและจะมีองค์กรเกือบเหมือนกันกับคลาส MainPage ที่สร้างขึ้นด้านบน

และในคลาสแอปพลิเคชัน เราสามารถตั้งค่าหน้านี้เป็นหน้าเริ่มต้น:

ใช้ Xamarin.Forms; เนมสเปซ HelloApp ( แอปคลาสบางส่วนสาธารณะ: แอปพลิเคชัน ( แอปสาธารณะ () ( InitializeComponent (); MainPage = new Page1 (); ) //........... ) )

5

ฉันสร้างส่วนต่าง ๆ ของระบบ GUI ของ Nintendo DS มากมาย เช่น ปุ่ม กล่องข้อความ และช่องทำเครื่องหมาย แต่ฉันต้องการวิธีซ่อนคลาสเหล่านี้ในคลาส Gui เดียว เพื่อให้ฉันสามารถวาดทุกอย่างบนหน้าจอพร้อมกันและตรวจสอบปุ่มทั้งหมดในคราวเดียว เพื่อตรวจสอบว่ามีการกดปุ่มใดๆ หรือไม่ คำถามของฉันคือวิธีที่ดีที่สุดในการจัดระเบียบคลาสทั้งหมด (เช่น ปุ่มและกล่องข้อความ) เป็นคลาส GUI เดียวคืออะไร

นี่เป็นวิธีหนึ่งที่ฉันคิด แต่ดูเหมือนจะไม่ถูกต้อง:

แก้ไข:ฉันใช้ C++

Class Gui ( สาธารณะ: void update_all(); void draw_all() const; int add_button(Button *button); // returns button id void remove_button(int button_id); private: Button *buttons; int num_buttons; )

รหัสนี้มีปัญหาเล็กน้อย แต่ฉันแค่อยากให้คุณเข้าใจว่าฉันต้องการอะไร

  • 5 คำตอบ
  • การเรียงลำดับ:

    กิจกรรม

2

คำถามนี้คล้ายกับคำถามที่ฉันกำลังจะโพสต์มาก เฉพาะคำถามของฉันสำหรับการเขียนโปรแกรม Sony PSP

ฉันค้นหาบางอย่างมาระยะหนึ่งแล้ว ฉันได้ปรึกษากับหนังสือบางเล่มและ VTM และจนถึงตอนนี้นี่เป็นแนวคิดคร่าวๆ ของระบบ UI แบบง่าย

Class uiElement() ( ... virtual void Update() = 0; virtual void Draw() = 0; ... ) class uiButton() public: uiElement ( ... virtual void Update(); virtual void Draw() ; ... ) class uiTextbox() public: uiElement ( ... virtual void Update (); virtual void Draw (); ... ) ... // คลาส ui Elements อื่น ๆ uiWindow () ( ... void Update (); void Draw(); void AddElement(uiElement *Element); void RemoveElement(uiElement *Element); std::list องค์ประกอบ; ... ) void uiWindow::Update() ( ... สำหรับ (รายการ ::iterator มัน = Elements.begin(); มัน != Elements.end(); it++) มัน->ปรับปรุง(); ... ) void uiWindow::Draw() ( ... สำหรับ (รายการ ::iterator มัน = Elements.begin(); มัน != Elements.end(); it++) it->วาด (); ... )

หลักการคือการสร้างหน้าต่างและองค์ประกอบที่แนบ หน้าจอผู้ใช้ไปที่มันและเรียกใช้วิธีการวาดและอัปเดตจากฟังก์ชันหลักที่สอดคล้องกัน

ยังไม่มีอะไรได้ผลสำหรับฉัน เนื่องจากฉันมีปัญหากับรหัสการวาด ด้วย API ที่หลากหลายบนพีซีและ PSP ฉันกำลังดูรหัส wrapper สำหรับ OpenGL และ psp gu

หวังว่านี่จะช่วยได้

0

กลยุทธ์ที่มีประโยชน์อย่างหนึ่งที่ควรคำนึงถึงคือรูปแบบคอมโพสิต ในระดับต่ำ คุณสามารถจัดการวัตถุ GUI ทั้งหมด (และคอลเล็กชันของวัตถุ) ได้ง่ายขึ้นเมื่อสร้างขึ้น แต่ฉันไม่รู้อะไรเลยเกี่ยวกับการออกแบบ GUI ดังนั้นที่เดียวในการค้นหาแรงบันดาลใจทั่วไปคือในซอร์สโค้ดของโครงการที่มีอยู่ WxWidgets เป็น GUI ข้ามแพลตฟอร์มที่สามารถเข้าถึงได้ รหัสแหล่งที่มา. โชคดีกับโครงการของคุณ!

0

3

สำหรับผู้ที่สนใจ นี่คือโอเพ่นซอร์สของฉัน ชุดเครื่องมือ GUI ที่ได้รับอนุญาตจาก BSD สำหรับ DS:

คำตอบของ Subject2k นั้นค่อนข้างดี แต่ฉันขอแนะนำให้มีรหัสที่มีองค์ประกอบส่วนต่อประสานลูกในคลาสพื้นฐาน uiElement อย่างจริงจัง นี่คือตัวอย่างที่ฉันติดตามใน Woopsie

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

  • แถบตารางสามารถสร้างแบบจำลองเป็นปุ่มหลายปุ่มที่จัดกลุ่มภายใต้องค์ประกอบ UI หลักเดียวที่ให้ความพิเศษร่วมกันในการเลือก
  • กลุ่มวิทยุ (เมื่อเวลาผ่านไป);
  • แถบเลื่อนสามารถแสดงเป็นองค์ประกอบแถบเลื่อน/รางน้ำและปุ่มขึ้น/ลง
  • รายการเลื่อนสามารถแสดงเป็นคอนเทนเนอร์และองค์ประกอบอินเทอร์เฟซผู้ใช้หลายรายการ

นอกจากนี้ คุณควรจำไว้ว่า DS มีโปรเซสเซอร์ 66 MHz และ RAM 4 MB ซึ่งใช้ทั้งเพื่อจัดเก็บโปรแกรมของคุณและเรียกใช้ (ดิสก์ DS จะถูกโหลดลงใน RAM ก่อนที่จะเรียกใช้) คุณควรพิจารณาว่าเป็นระบบฝังตัวซึ่งหมายความว่าไม่มี STL ฉันลบ STL ออกจาก Woopsi และจัดการเพื่อประหยัด 0.5MB ไม่มากตามมาตรฐานเดสก์ท็อป แต่เป็น 1/8 ของหน่วยความจำ DS ที่มีอยู่ทั้งหมดที่ใช้โดยขยะ STL

ฉันให้รายละเอียดกระบวนการทั้งหมดของการเขียนส่วนติดต่อผู้ใช้ในบล็อกของฉัน:

มันมีคำอธิบายของสองอัลกอริทึมที่ฉันคิดขึ้นสำหรับการวาดหน้าจอใหม่ ซึ่งเป็นส่วนที่ยุ่งยากในการสร้าง GUI (อันหนึ่งแค่แยกสี่เหลี่ยมออกแล้วจำพื้นที่ที่มองเห็นได้ ส่วนอีกอันใช้ BSP tree ซึ่งมีประสิทธิภาพมากกว่าและง่ายกว่ามาก เข้าใจ) เคล็ดลับการเพิ่มประสิทธิภาพ ฯลฯ ง.



กำลังโหลด...
สูงสุด