Ecere SDK/eC Forums https://ecere.org/community/ Print view |
|
[Solved]How to call OS api? https://ecere.org/community/viewtopic.php?f=4&t=152 |
Page 1 of 2 |
Author: | samsam598 [ Fri Aug 19, 2011 1:37 am ] |
Post subject: | [Solved]How to call OS api? |
Greetings! As subjected,I tested on windows 7 with MessageBoxA function: Code: Select all
Code: Select all
|
Author: | jerome [ Fri Aug 19, 2011 2:00 am ] |
Post subject: | Re: How to call OS api? |
Hi Sam, Sure, it's possible to do so. But why? The goal of Ecere is to write cross-platform applications, so that kind of defeats the purpose. Why don't you use the Ecere MessageBox instead? MessageBox { text = "Caption", contents = "a message string" }.Modal(); The (cryptic) error you are getting is because preprocessor definitions should start on an empty line: Add a new line before #ifdef win32 inside your code, it cannot follow any other character. Also, the proper definition is __WIN32__, so you'll need to change that. Because some of the code inside windows.h conflicts with Ecere data types, you need to put it at the top (before import "ecere") as well, and #define WIN32_LEAN_AND_MEAN to make sure it doesn't include extra stuff (which would require more workarounds to include): Code: Select all
|
Author: | jerome [ Fri Aug 19, 2011 2:03 am ] |
Post subject: | Re: How to call OS api? |
By the way I see you are trying to load up an icon in your program. If you add the png file to the project resources folder, you can refer to it as ":dbnavedit.png" from within your program. (It will get included inside the executable) |
Author: | samsam598 [ Fri Aug 19, 2011 2:32 am ] |
Post subject: | Re: How to call OS api? |
Thanks Jerome.MessageBox just win32 api that I can easily remember.Yes MessageBox in Ecere is more user friendly than the OS api.The concern is just for two purpose:one is to ensure Ecere is 100% compatible with C;two is calling OS api is not a problem in Ecere.Sometimes programmer can't avoid to interact with OS api,for example,what if I want to manipulate an excel file together with SQL. After my modifying the little program with your guidline,the program can run now,but with a little problems: 1.Button btnHello hotkey ALT+M can not work properly,it will minimize the program; 2.The Chinese characters in the MessageBox can't be recognized.All a mess.Trying to use win32 Macro _T and or L can't get compiled any more. Regards, Sam |
Author: | jerome [ Fri Aug 19, 2011 2:53 am ] |
Post subject: | Re: How to call OS api? |
Hi Sam, Yes I understand that's what you're trying to do with MessageBox I realize Alt-M is a bit drastic for the Minimize button hehe. We'll have to review if we want to change that. In the meantime here is a workaround to put in your Form1 class: Code: Select all
Code: Select all
|
Author: | samsam598 [ Fri Aug 19, 2011 3:04 am ] |
Post subject: | Re: How to call OS api? |
Thanks,although #define UNICODE does not make sense,function UTF8toUTF16 solved the problem perfectly. |
Author: | jerome [ Fri Aug 19, 2011 3:08 am ] |
Post subject: | Re: How to call OS api? |
When you #define UNICODE before including windows.h, it will map the macro MessageBox to MessageBoxW (And all other Windows APIs this way as wel). It's up to you if you want to explicitly say e.g. MessageBoxA or MessageBoxW everywhere in your code (then you don't need to #define UNICODE). NOTE: You will hit another name conflict with Ecere's MessageBox class, so might as well use MessageBoxW if you don't want to redefine things |
Author: | samsam598 [ Fri Aug 19, 2011 3:13 am ] |
Post subject: | Re: How to call OS api? |
Sorry ,I did as you mentioned,but the way #define UNICODE can't make the Chinese characters be recognizable still. Resource ":iconfile.png" will be compiled and included in the executable file is great!I like it! I noticed there is only icon in the task bar,not in the top left of the form. |
Author: | jerome [ Fri Aug 19, 2011 11:13 am ] |
Post subject: | Re: How to call OS api? |
With #define UNICODE , you have the MessageBox conflict. And you still need to use UTF8to16... It doesn't change that. It just defines a MessageBox macro mapping to MessageBoxW, so you can type MessageBox instead of MessageBoxW. But you have conflict with Ecere's MessageBox, so it's useless in that case, but useful if you use many different Windows APIs like that, and useful for people who want to switch between supporting international languages and just ASCII text. Ecere itself does not display icons on the title bar when it draws window decorations. If you use the latest ecere and set 'nativeDecorations = true' for your form, then you should get the icon displaying on the title bar. Also, if you want an icon for your executable file, you need to build a small .rc file, save the icon as an .ico file, compile the .rc file with windres (e.g. windres resources.rc resources.o), and add in Project Settings / Linking, under 'Additional Libraries', 'resources.o' to link in your icon. A sample resources.rc would contain: Code: Select all
|
Author: | samsam598 [ Mon Aug 22, 2011 4:04 am ] |
Post subject: | Re: How to call OS api? |
For Icon just tested,if I assign an icon file to the form,the nativeDecorations cann't be set any more(If I set this property to true prior to assian the icon file,the nativeDocorations will turn back to false).I got a crash--one time; the nativeDecorations turned back to false--seems always. |
All times are UTC-05:00 | Page 1 of 2 |
Powered by phpBB® Forum Software © phpBB Limited |