340 likes | 475 Views
การเขียนโปรแกรมบนวินโดว์ด้วยภาษาซี ครั้งที่ 8. รศ . ธีรวัฒน์ ประกอบผล คณะวิทยาศาสตร์ สถาบันเทคโนโลยีพระจอมเกล้าเจ้าคุณทหารลาดกระบัง. Animation Control. ใช้แสดงไฟล์ภาพเคลื่อนไหว หรือไฟล์ AVI ที่ไม่มีเสียง ซึ่งเป็นภาพที่มีอย่างน้อย 1 เฟรม และบันทึกแบบ RLE (Run Length Encoded(RLE).
E N D
การเขียนโปรแกรมบนวินโดว์ด้วยภาษาซีครั้งที่ 8 • รศ.ธีรวัฒน์ ประกอบผล • คณะวิทยาศาสตร์ • สถาบันเทคโนโลยีพระจอมเกล้าเจ้าคุณทหารลาดกระบัง
Animation Control ใช้แสดงไฟล์ภาพเคลื่อนไหว หรือไฟล์ AVI ที่ไม่มีเสียง ซึ่งเป็นภาพที่มีอย่างน้อย 1 เฟรม และบันทึกแบบ RLE (Run Length Encoded(RLE)
เมสเสจของการเคลื่อนที่เมาส์เมสเสจของการเคลื่อนที่เมาส์ เมื่อเมาส์เคลื่อนที่อยู่ในกรอบหน้าต่างจะส่งเมสเสจที่ชื่อ WM_MOUSEMOVE ออกมา ถ้าหากเมาส์หลุดออกจากพื้นที่จะไม่เกิดเมสเสจ ฟังก์ชันที่สร้างขึ้นจะมีรูปแบบดังนี้ void Cxxxx::OnMouseMove(UINT nFlage,Cpoint point) { } โดย nFlage เก็บค่าคีย์ที่กด point เก็บค่าตำแหน่ง
ค่าคงที่ของคีย์ที่กด และตำแหน่ง MK_LBUTTON ปุ่มซ้ายของเมาส์ถูกกด MK_MBUTTON ปุ่มกลางของเมาส์ถูกกด MK_RBUTTON ปุ่มขวาของเมาส์ถูกกด MK_CONTROL ปุ่ม Ctrl ถูกกด MK_SHIFT ปุ่ม Shift ถูกกด point.x ตำแหน่งในแนวแกน x point.y ตำแหน่งในแนวแกน y
เมสเสจของการคลิกปุ่มเมาส์เมสเสจของการคลิกปุ่มเมาส์ WM_LBUTTONDOWN เมื่อปุ่มซ้ายถูกกดลง (กดค้าง) WM_RBUTTONDOWN เมื่อปุ่มขวาถูกกดลง WM_LBUTTONUP เมื่อปุ่มซ้ายถูกปล่อยขึ้น WM_RBUTTONUP เมื่อปุ่มขวาถูกปล่อยขึ้น WM_LBUTTONDBLCLK เมื่อปุ่มซ้ายถูกดับเบิ้ลคลิก WM_RBUTTONDBLCLK เมื่อปุ่มขวาถูกดับเบิ้ลคลิก
ฟังก์ชันทางจอภาพที่น่าสนใจฟังก์ชันทางจอภาพที่น่าสนใจ TextOut(x,y,”ข้อความ”,ความยาว) SetTextColor(RGB(m,m,m)) SetBkColor(ค่าสี) สำหรับการกำหนดฟอนต์จะอยู่ในสตรัคเจอร์ LOGFONT
ข้อมูลของ LOGFONT IfHeigh ความสูงของตัวอักษร IfWidth ความกว้างของตัวอักษร IfEscapement มุมเอียงของแถวตัวอักษร IfOrientation มุมเอียงของตัวอักษร IfWeight ความหนาของตัวอักษร Ifltalic กำหนดแบบตัวอักษรแอน (0 ไม่เอน) IfUnderline กำหนดตัวอักษรแบบขีดเส้นใต้ (0 ไม่ขีด) IfStrikeOut กำหนดตัวอักษรแบบมีขีดพาดตัวอักษร
ข้อมูลของ LOGFONT(ต่อ) IfCharSet กำหนดรูปแบบชุดตัวอักษร IfOutPrecirion การเลือกรูปแบบตัวอักษรแทนค่าที่กำหนด IfClipPrecision การจำกัดตัวอักษรให้อยู่ในพื้นที่ที่กำหนด IfQuality กำหนดคุณภาพของตัวอักษรเมื่อพิมพ์ทางเครื่องพิมพ์ IfFaceName ชื่อแบบของตัวอักษร
การวาดรูปในวินโดวส์ การวาดรูปของโปรแกรมบนวินโดวส์จะไม่ใช้วิธีการติดต่อกับฮาร์ดแวร์โดยตรง แต่จะใช้ดีไวซ์คอนแท็กซ์ หรือที่เรียกกันว่า DC แทน
อุปกรณ์ในการวาดภาพ • Pen เป็นปากกาในการวาดเส้น ลงจุด วาดวงกลม สีเหลี่ยม • brush เป็นแปรงใช้ในการลงสี • Bitmap & palette ใช้สำหรับกำหนดเซ็ตของสี • Region สำหรับการคลิปรูปต่าง ๆ • Font สำหรับแสดงข้อความ
แบบลายเส้นสำหรับ Pen PS_DASH ลายเส้นประ PS_DASHDOT ลายเส้นประ สลับจุด PS_DASHDOTDOT ลายเส้นประ สลับจุดสองจุด PS_DOT ลายเส้นจุด PS_INSIDEFRAME ลายเส้นที่ใช้คู่กับแถบสี PS_NULL ลายเส้นเปล่า ไม่มีสี PS_SOLID ลายเส้นทึบแบบปกติ
ตัวอย่างฟังก์ชันในการวาดภาพตัวอย่างฟังก์ชันในการวาดภาพ MoveToEx() ใช้กำหนดตำแหน่งเริ่มต้นของ Pen LineTo() ใช้กำหนดจุดสิ้นสุด SetPixel ใช้ในการลงจุดสี Rectangle ใช้วาดกล่อง FillRect ใช้วาดสี่เหลี่ยมทึบ
การใช้ Brush รูปแบบของการแรเงา (0) HS_HORIZONTAL ลายเส้นในแนวนอน HS_VERTICAL ลายเส้นในแนวดิ่ง (2) HS_FDIAGONAL เส้นทแยงจากบนซ้ายไปขวาล่าง (3) HS_BDIAGONAL เส้นทแยงจากล่างช้ายไปขวาบน (4) HS_CROSS ลายเส้นแนวนอนตัดกับแนวตั้ง (5) HS_DIAGCROSS ลายเส้นทแยงตัดกัน
เมสเสจของการกดคีย์บอร์ดเมสเสจของการกดคีย์บอร์ด WM_CHAR ตรวจสอบว่าคีย์ใดกด ใช้กับ ASCII Key WM_KEYDOWN ตรวจสอบว่าคีย์กำลังกดอยู่หรือไม่ (Key Down) WM_KEYUP ตรวจสอบว่าคีย์ถูกปล่อยหรือยัง (Key Up)
ค่าคงที่ของการกดคีย์ • VK_HOME VK_RETURN • VK_END VK_UP • VK_DELETE VK_DOWN • VK_INSERT VK_LEFT • VK_ESCAPE VK_RIGHT • VK_CONTROL VK_F1 • VK_SHIFT …… • VK_TAB VK_F12
ตัวอย่าง Void Cxxx::OnKeyDown(UNIT nChar,………….) { char IsChar; IsChar = char(nChar); if(IsChar == ‘A’) { ………….. } }
ตัวอย่างการอ่านคีย์พิเศษตัวอย่างการอ่านคีย์พิเศษ case WM_KEYDOWN : { char str[20]; switch(ตัวแปร) { case VK_RIGHT : strcpy(str,”right “); break; case VK_UP : strcpy(str,”up “); break; ………….. default : strcpy(s,”“); break; } TextOut(cp,10,50,str,strlen(str)); }
การใช้งาน Common Dialog เป็นไดอะล๊อกพื้นฐานบนวินโดว์ ถูกเก็บอยู่ใน API ที่โปรแกรมบนวินโดว์สามารถเรียกใช้ได้ แมสเสจบ๊อกซ์ (Message Box) ไดอะล๊อกเปิดไฟล์และเซฟไฟล์ ไดอะล๊อกเลือกสี ไดอะล๊อกเลือกฟอนต์ ไดอะล๊อกพิมพ์ (Print Dialog)
Message Box รูปแบบ int MessageBox(“ข้อความ”,ไตเติ้ลบาร์”,รูปภาพและปุ่มกด)
มาร์โครปุ่มกด ID Buttons MB_ABORTRETRYIGNORE Abort,Retry,Ignore MB_OK OK MB_OKCANCEL OK,Cancel MB_RETRYCANCEL Retry,Cancel MB_YESNO Yes,No MB_YESNOCANCEL Yes,No,Cancel
มาโครรูปไอคอน ID Icon MB_ICONINFORMATION Informational icon MB_ICONQUESTION Question mark icon MB_ICONSTOP Stop sign icon MB_ICONEXCLAMATION Exclamation mark icon
ค่าที่ถูก Return เมื่อมีการคลิกปุ่ม ID Button Clicked IDABORT Abort IDRETRY Retry IDIGNORE Ignore IDYES Yes IDNO NO IDOK OK IDCANCEL Cancel
COMMON DIALOG CLASSES Class Dialog Type CFileDialog File selection CFontDialog Font selection CColorDialog Color selection CPageSetupDialog Page setup for printing CPrintDialog Printing CFindReplaceDialog Find and Replace
ไดอะล๊อกเปิดไฟล์เซฟไฟล์(CFileDialog)ไดอะล๊อกเปิดไฟล์เซฟไฟล์(CFileDialog) ทำได้โดยประกาศออปเจ็กต์ของคลาส CFileDialog และเรียกฟังก์ชัน DoModal() เพื่อแสดงไดอะล๊อกบนจอภาพ รูปแบบ CFileDialog(ประเภทไดอะล๊อก,ชนิดของไฟล์,ชื่อไฟล์,ตัวเลือก,นามสกุลไฟล์) ประเภทไดอะล๊อก ถ้าเป็น TRUE เป็นการเปิดไฟล์ ถ้าเป็น FALSE เป็นการปิดไฟล์
มาโครตัวเลือก พารามิเตอร์ต่าง ๆ ถ้าไม่ใช้ให้ใส่ค่า NULL OFN_READONLY แสดงเช็คบ๊อกซ์ Read Only OFN_HIDEREADONLY ไม่แสดงเช็คบ๊อกซ์ Read Only OFN_SHOWHELP แสดงปุ่ม Help OFN_OVERWRITEPROMPT ถามว่าต้องการบันทึกหรือไม่ OFN_ALLOWMULTISELECT ให้เลือกได้หลาย ๆ ไฟล์
ฟังก์ชันในคลาส CFileDialog GetPathName คืนค่าพาทปลายทางที่เก็บไฟล์ GetFileName คืนค่าชื่อไฟล์ที่ถูกเลือกพร้อมนามสกุล GetFileExt คืนค่านามสกุลของไฟล์ GetFileTitle คืนค่าชื่อไฟล์
การอ่านและบันทึกข้อมูลการอ่านและบันทึกข้อมูล การที่ออปเจ็กต์สามารถเซฟและโหลดไฟล์ได้ แสดงว่าคลาสของมันมีความสามารถในการเซฟและโหลดไฟล์ คลาสที่ใช้ในการจัดการไฟล์ของ MFC คือ Cfile โดยโหมดการทำงานถูกกำหนดไว้ดังนี้
CFile::modeCreate สร้างไฟล์ใหม่หรือลบไฟล์เก่าที่มีอยู่CFile::modeCreate สร้างไฟล์ใหม่หรือลบไฟล์เก่าที่มีอยู่ CFile::modeRead เปิดไฟล์เพื่ออ่านอย่างเดียว CFile::modeReadWrite เปิดไฟล์เพื่ออ่านและเขียนข้อมูล CFile::modeWrite เปิดไฟล์เพื่อเขียนได้อย่างเดียว CFile::typeBinary เปิดไฟล์แบบไบนารี CFile::typeText เปิดไฟล์แบบเท็กซ์
ตัวอย่าง สร้างไฟล์ใหม่ CFile myFile(“myFile.myf”,CFile::modeCreate|CFile::modeWrite); สร้างไฟล์ใหม่ชื่อ myFile.myf เพื่อเซฟข้อมูล เขียนไฟล์ myFile.Write(data,datalength); ข้อมูล ความยาว (GetLength)
ตัวอย่าง ปิดไฟล์ myFile.Close ปิดออปเจ็กทิ้งไป
ตัวอย่าง เปิดไฟล์เพื่ออ่าน CFile myFile(“myFile.myf”,CFile::modeRead); เปิดไฟล์ชื่อ myFile.myf เพื่ออ่านข้อมูลอย่างเดียว อ่านข้อมูล int nbyte = file.Read(buffer,80); message[nbyte] = 0; CString data = message;
ฟังก์ชันในคลาส CFile Cfile() สร้างไฟล์และเปิดไฟล์ Abort() ปิดไฟล์ (ไม่สนใจ Error) Close() ปิดไฟล์ Duplicate()Copy ไฟล์ GetFileName() ใช้อ่านชื่อไฟล์ GetFilePath() ใช้อ่านไดเรคทอรี่ไฟล์ GetFileTitle() ใช้อ่านชื่อไฟล์อย่างเดียว(ไม่เอานามสกุล)
ฟังก์ชันในคลาส Cfile (ต่อ) GetLength() ใช้อ่านขนาดไฟล์ GetPosition() ใช้อ่านตำแหน่งที่พอยเตอร์ชี้อยู่ Open() เปิดไฟล์ Read() อ่านข้อมูลจากไฟล์ Remove() ลบไฟล์ทิ้ง Rename() เปลี่ยนชื่อไฟล์ Seek() เลื่อนพอยเตอร์ไปยังตำแหน่งที่ต้องการ
ฟังก์ชันในคลาส Cfile (ต่อ) SeekToBegin() เลื่อนพอยเตอร์ไปตำแหน่งข้อมูลแรก SeekToEnd() เลื่อนพอยเตอร์ไปยังตำแหน่งข้อมูลสุดท้าย SetFilePath() กำหนดไดเรคทอรี่ที่ต้องการ SetLength() กำหนดขนาดของไฟล์ Write() เซฟข้อมูลลงไฟล์